当前位置:网站首页>为什么完全背包要用顺序遍历?简要解释一下

为什么完全背包要用顺序遍历?简要解释一下

2022-07-06 16:16:00 童 话

完全背包的意思是每种物品可以多次放入背包。

dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
dp[6] = max(dp[6], dp[6 - 1] + 2)
      = max(dp[6], max(dp[5], dp[5 - 1] + 2) + 2)

dp[j]表示容量为j的背包装了物品后的最大价值。
1表示第i种物品的重量,2表示第i种物品的价值。
初始的dp[5]和dp[6]全为0。
这里,因为初始dp[6]是0,所以肯定选了dp[6 - 1] + 2,也就是肯定放入了第i种物品
而dp[6]=……的执行要用到dp[5]的结果。
由于是顺序执行,所以dp[6]执行之前肯定已经执行了dp[5]=……。
dp[5]=……执行时,因为初始dp[5]是0,所以肯定选了dp[5 - 1] + 2,也就是肯定也放入了第i种物品
所以说第i种物品放入了多次。
所以完全背包应该用顺序遍历。

原网站

版权声明
本文为[童 话]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_41409120/article/details/125525951