2 个容量相同的背包 - 为什么我们不能两次找到最大值

2 knapsacks with same capacity - Why can't we just find the max-value twice

如果给你一组具有价值和重量的物品:[(w1,v2),(w2,v2),...(wn,vn)],以及两个容量相等的背包 Knap1 和 Knap2 C,目标是确定物品S1和S2的最优子集分别是什么可以进入Knap1和Knap2并最大化背包的价值和容量。

解决此问题的错误方法是首先使用 DP 编程算法使用所有项目作为候选项填充 Knap1,然后使用 Knap1 的剩余项目填充 Knap2。

我不明白如果两个背包的容量相等,为什么这个算法是不正确的。有人可以解释一下或举个例子吗?

假设背包的容量是10,我们有这些物品(重量,价值):

(8, 200) (1, 10) (1, 10) (2, 15) (9, 100)

只看一个背包的贪心算法会使用重量为 8、1 和 1 的物体来获得 220 值,但是当你考虑到两个袋子时,显然留下 1 并取 2 更好。

一个反例:
项目 S 组:(w_i, v_i)

   s_1=(1,2) , s_2=(2,1) , s_3=(3,10) , s_4=(4,7) 

背包容量:c_1 = c_2 = 5

您的第一轮 DP 将采用项目 s_1s_3,这将导致价值 12。现在第二个背包还剩s_4s_2。因此,您的算法将选择 s_4,这将导致值 7s_2 会剩下。
总价值:19

最优解是 s_1s_4 在一个背包里,s_2s_3 在另一个背包里。 最优总值:20