0-1背包的算法有2个麻袋?

时间:2015-03-19 02:43:09

标签: algorithm dynamic-programming knapsack-problem recurrence

正式地说,我们有两个容量为c1和c2的麻袋。有n个项目有利润pi和权重wi。在0-1背包问题中,我们需要用这些项目填写c1和c2,以便最大化整体利润。假设pi和wi是正整数!

对于2背包问题,下面的复发关系是否保持良好?

DP [I] [J] [K]是我们可以从第一个i项目中获得的最大利润,使得在背包#1中使用精确j的重量并且在背包#2中使用正好k的重量< / p>

DP [i] [j] [k] = max(DP [i-1] [j] [k],DP [i] [j-1] [k],DP [i] [j] [ k-1],DP [i] [jW [j]] [k] + C [i],DP [i] [j] [kW [k]] + C [i])

1 个答案:

答案 0 :(得分:0)

假设C [i]和W [i]分别是项目的值和权重。

鉴于j-W [i]> 0,k-W [i]> 0(为了便于编写公式。我们仍然可以通过添加两行来编写没有这个假设的公式),等式应该是

DP [i] [j] [k] = max(DP [i-1] [j] [k],DP [i-1] [jW [i]] [k] + C [i], DP [i-1] [j] [kW [i]] + C [i])