给定 n个物品,第 i个物品的重量为wgt[i-1]、价值为val[i-1],和一个容量为 cap 的背包。每个物品可以重复选取,问在限定背包容量下能放入物品的最大价值。
wgt=[10,20,30,40,50] val=[50,120,150,210,240] cap=50 def allbag(wgt,val,cap): n=len(wgt) #状态dp[i][c] dp=[[0]*(cap+1) for _ in range(n+1)] #状态转移 #重量超过背包容量 for i in range(1,n+1): for c in range(1,cap+1): if wgt[i-1]>c:#第i个物品的重量超过背包容量,不放入背包 dp[i][c]=dp[i-1][c] else: dp[i][c]=max(dp[i-1][c],dp[i][c-wgt[i-1]]+val[i-1])#不放入背包和从前i个物品中选择放进去的最大值,c-wgt[i-1]--放进物品后的剩余背包容量 return dp[n][cap] ab=allbag(wgt,val,cap) print(ab)---------------------290