据我所知,背包问题使用动态编程来根据以前的项目找到每个项目的最佳解决方案。该假设假设解决方案取决于项目的顺序。为什么最终解决方案不依赖于订单?
答案 0 :(得分:3)
没有。背包问题的动态编程解决方案不依赖于之前的项目。
在考虑是否将物品放入背包时,我们只需要在选择物品之前和之后考虑背包的剩余容量。因此,我们遍历所有可能的剩余容量并选择最佳容量。
dp[i][c] = max(dp[i-1][c+w[i]] + v[i], dp[i-1][c])
其中 dp [i] [c] 表示考虑 i 项后的最大可能值,背包的剩余容量等于 c 。 w [i] 表示 i 项的重量(或音量), v [i] 表示<的值< em> i -th item。
没有必要按顺序考虑这些项目。考虑到订单中的物品只是为了方便。您还可以考虑以相反的顺序或随机顺序选择项目。