
w = [0, 1, 4, 3, 1]
p = [0, 1500, 3000, 2000, 2000]
n = len(w) - 1
m = 4
x = []
v = 0
dp = [[0 for col in range(m + 1)] for raw in range(n + 1)]
def knapsack_dynamic(w, p, n, m, x):
for i in range(1, n + 1):
for j in range(1, m + 1):
if (j >= w[i]):
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + p[i])
else:
dp[i][j] = dp[i - 1][j]
j = m
for i in range(n, 0, -1):
if dp[i][j] > dp[i - 1][j]:
x.append(i)
j = j - w[i]
v = dp[n][m]
return v
print ('最大值为:' + str(knapsack_dynamic(w, p, n, m, x)))
print ('物品的索引:',x)