参考原文:【动态规划】01背包问题(通俗易懂,超基础讲解)
对应的python代码:
# w = [0,2,3,4,5]
# v = [0,3,4,5,6]
# dp = [[0 for j in range(9)] for i in range(5)]
# bagV = 8
# item = [0] *5
n, bagV = map(int,input().split())
w = [0]
v = [0]
for i in range(n):
x,y = map(int,input().split())
w.append(x)
v.append(y)
dp = [[0 for j in range(bagV+1)] for i in range(n+1)]
item = [0] * (n+1)
def findMax():
for i in range(1, n+1):
for j in range(1, bagV+1):
if j < w[i]:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])
def findWhat(i, j):
if i > 0:
if dp[i][j] == dp[i-1][j]:
item[i] = 0
findWhat(i-1, j)
elif j-w[i] >= 0 and dp[i][j] == dp[