Algorithm 反向0/1背包:表格中的这一行怎么可能?
我正在解决一个反向0/1背包问题,也就是说,我试图仅使用DP表重新创建所有项目的权重和值列表 我有这张桌子: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] [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是可能的,因为你可以同时获取这两个项目。这是你能为这一排剩下的人做的最好的了
另见