变量介绍 c为背包的容量,w为物体的重量,v为物体的价值,n为物体的个数
则二维列表的实现代码如下
c=10
w=[3,4,5,7]
v=[1,5,6,9]
n=len(w)
dp=[[0 for i in range(c+1)]for i in range(n+1)]
w.insert(0,0)
v.insert(0,0)
for i in range(1,n+1):
for j in range(1,c+1):
if w[i]<=j:
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])
print(" ",end='')
print(dp[i][j],end='')
else:
dp[i][j]=dp[i-1][j]
print(" ",end='')
print(dp[i][j],end='')
print()
print("最大价值是",dp[n][c])
一维列表的实现方式是
c=10
w=[3,4,5,7]
v=[1,5,6,9]
n=len(w)
dp=[0 for i in range(c+1)]
w.insert(0,0)
v.insert(0,0)
for i in range(1,n+1):
for j in range(c,0,-1):
if w[i]<=j:
dp[j]=max(dp[j],dp[j-w[i]]+v[i])
print(dp[j],end='')
print(' ',end='')
print()
print("最大价值是",dp[c])
实际推导图如下: