为什么在无界背包的情况下构造一维数组而在 0/1 背包的情况下构造二维数组?

Why is there a 1-D array constructed in case of unbounded knapsack and 2-D array constructed in case of 0/1 knapsack?

我看到在无界背包的情况下构造一维数组,在0/1背包的情况下构造二维数组?为什么会这样?这个问题是参考动态规划问的。

动态编程通过维护 "states" 来工作,当然您希望使用最少的变量来表示状态。

现在,这两个问题的不同之处在于,在 Unbounded knapsack problem 中,您可以多次选择单个物品,而在 0-1 knapsack problem 中,您只能选择一次物品。这意味着,我想在 0-1 背包问题中包括我是否已经从列表中选择了一个项目,但在 0-1 背包问题中没有必要这样做。这正是 0-1 背包问题中二维的原因。

看,0-1背包的DP:dp[i][w] = max(val[i] + dp[i-1][w-wt[i]], K[i-1][w]);。这表示选择项目 i 并获得权重为 w - wt[i] 的项目 i-1 的最佳解决方案,这确保我们不会多次选择项目 i。

查看无界背包DP:dp[w] = max(dp[w], dp[w - wt[i] ] + val[i] )。不需要记住我们之前是否选择过 ith 项,如果它给我们带来最大值,我们可以重复使用它。