W = 20 n = 5 w = [2, 3, 4, 5, 9] v = [3, 4, 5, 8, 10] # 初始化: 全为0 dp = [0] * (W + 1) # 先遍历物品, 再遍历背包容量 for i in range(n): for j in range(w[i]-1,W, -1): # 背包容量在w[i]与W之间才能装下物品i,倒序遍历是为了保证物品i只被放入一次。 value1 = dp[j - w[i]] + v[i] # 装 value2 = dp[j] # 不装 dp[j] = max(value1, value2) print(dp) print(dp[-1])