下列代码实现了一个0-1背包的一维动态规划代码,内层循环是经典的逆序写法。若将内层循环改成正序遍
历(即 for (int j = w[i]; j <= W; j++)),仍能得到正确答案。
int main() { int W = 5; int w[] = {2, 3, 4}; int v[] = {10, 1, 1}; int n = 3; int dp[6] = {0}; for (int i = 0; i < n; i++) { for (int j = W; j >= w[i]; j--) { // ← 逆序! dp[j] = max(dp[j], dp[j - w[i]] + v[i]); } } cout << dp[W];}