01背包
有为N件物品,它们的重量w分别是w1,w2,…,wn,它们的价值v分别是v1,v2,…,vn,每件物品数量有且仅有一个,现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和?
Tips:
第 i 件物品的状态只和前 i-1 件物品的状态有关!
dp[i][j] 表示的是前 i 件物品,放入容量为 j 背包的最大价值。
N = int(input())
M = int(input())
w = list(map(int, input().split()))
v = list(map(int, input().split()))
dp = [[0]*(M+1) for i in range(N+1)]
for i in range(1,N+1):
for j in range(1,M+1):
if w[i-1]>j:
dp[i][j]=dp[i-1][j]
else:
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i-1]]+v[i-1])
print(dp[-1][-1])
优化
N = int(input()