问题描述大致如下:
给你n个物品,两个背包,如何装包可以使得两个背包得到的价值是最大的?
一个简化问题:来自微软的笔试题。
题目大意:有两条生产线,一条可以工作x小时,一条工作y小时。一个数组表示每种汽车生产需要多久。要求最多生产多少种汽车。
解析:这里物品的价值都为1了
具体代码如下(包括01背包双背包问题的板子【python】)
# 双背包问题的板子
# dp[i][j][k]表示第i件物品 第一个背包容量j 第二个背包容量k 所能得到的最大价值
# 三种状态转移 1、不装 2、装第一个背包 3、装第二个背包
# 记得01背包状态压缩 第一维可以从后向前 不需要
v = list(map(int, input().split()))
# v = [6, 5, 5, 4, 3]
n = len(v)
v = [0] + v
# 每个背包物品价值,这里其实都是1
# w1=list(map(int,input().split()))
# w1 = [1, 1, 1, 1, 1]
# w1=[0]+w1
# w2=list(map(int,input().split()))
# w2 = [1, 1, 1, 1, 1]
# w2=[0]+w2
# 背包容量
c1, c2 = map(int, input().split())
# c1 = 8
# c2 = 9
# 背包容量
dp = [[0