Algorithm 反向0/1背包:表格中的这一行怎么可能?

Algorithm 反向0/1背包:表格中的这一行怎么可能?,algorithm,dynamic-programming,knapsack-problem,Algorithm,Dynamic Programming,Knapsack Problem,我正在解决一个反向0/1背包问题,也就是说,我试图仅使用DP表重新创建所有项目的权重和值列表 我有这张桌子: [0][1] [4][5][6] [12] [0] 0 0 0 0 0 0 0 0 0 0 0 0 0 [1] 0 4 4 4 4 4 4 4 4 4 4 4 4 [2] 0 4 4 4 6 10 10 10 10 10 10 10 10 我不明白第[2]行怎么可能 [0]-很明显,如果我们不在背包

我正在解决一个反向0/1背包问题,也就是说,我试图仅使用DP表重新创建所有项目的权重和值列表

我有这张桌子:

    [0][1]   [4][5][6]               [12]
[0]  0  0 0 0 0  0  0  0  0  0  0  0  0
[1]  0  4 4 4 4  4  4  4  4  4  4  4  4  
[2]  0  4 4 4 6 10 10 10 10 10 10 10 10
我不明白第[2]行怎么可能

[0]-很明显,如果我们不在背包中放任何东西,答案的总值为0

[1] -在第[1]行中,我看到
[1][1]=4
,我希望我正确地得出结论,第一个项目的
重量=1
值=4
。所以,因为我们只放了一件物品,所以这是我们在这一行所能期望的唯一重量

[2] -当我们达到[2][4]时,我们有6,6>[2-1][4],我假设我们在这里使用两个项目,一个
weight=1
value=4
(旧的)和
weight=4-1
value=6-4
=
weight=3
value=2
,这是新的


问题:如何使[2][5]=10?按照我的理解,我们不能在一行中放置超过一个项目。如果我们在这里使用了两个项目,那么第[2]行中从[2][4]开始到该行末尾的所有元素不都应该有6个吗?

如果您有两个项目,一个权重为1,值为4,另一个权重为4,值为6,这似乎是可能的

怎么做?当您处于索引(2,4)时,在考虑项目2(权重4,值6)的行中,您的权重容量首次为4。这使您可以获取值为6的项,而不是之前在索引(2,3)中获取的权重为1、值为4的项,有效地从索引(2,0)中的子问题构建

现在,当你在索引(2,5)处,权重容量为5时,总值为10是可能的,因为你可以同时获取这两个项目。这是你能为这一排剩下的人做的最好的了


另见