以下代码实现了0-1背包问题的一维动态规划解法,内层循环采用经典的逆序遍历方式。若将内层循环改为正序遍历(即 for j in range(w[i], W + 1): ),仍能得到正确答案。
1 def knapsack_01(): 2 W = 5 3 w = [2, 3, 4] 4 v = [10, 1, 1] 5 n = 3 6 dp = [0] * (W + 1) 7 8 for i in range(n): 9 for j in range(W, w[i] - 1, -1): 10 dp[j] = max(dp[j], dp[j - w[i]] + v[i]) 11 12 print(dp[W]) 13 14 knapsack_01()