一、题目
给定 n个物品,第 i 个物品的重量为 wgt[i-1]、价值为 val[i-1],和一个容量为 cap的背包。每个物品只能选择一次,问在限定背包容量下能放入物品的最大价值。
#第一方法----空间优化 cap=4#容量 weg=[1,2,3]#重量,下标从1开始 val=[5,11,15]#价值,下标从1开始 def spaceOp(weg,val,cap): n = len(weg) # 物品的个数 dp=[0]*(cap+1) for i in range(1,n+1): for c in range(cap,0,-1): if weg[i-1]>c:#如果该物品重量大于剩余背包容量 dp[c]=dp[c] else: dp[c]=max(dp[c],dp[c-weg[i-1]]+val[i-1])#不放入背包和放入背包的这两种方案的最大值 return dp[cap] so=spaceOp(weg,val,cap) print(so)----------------------------20
#第二方法---------动态规划
def bagdp(weg,val,cap): n=len(weg)#物品的个数 dp=[[0]*(cap+1) for _ in range(n+1)]#不放一个物品在背包里,背包价值为0;背包容量为0时,背包放不进去东西,背包价值为0 for i in range(1,n+1): for c in range(1,cap+1):#剩余容量 if weg[i-1]>c:#如果该物品重量大于剩余背包容量,就不放进去东西 dp[i][c]=dp[i-1][c] else: dp[i][c]=max(dp[i-1][c],dp[i-1][c-weg[i-1]]+val[i-1])#不放入背包和放入背包方案的最大值 return dp[n][cap]
so=bagdp(weg,val,cap) print(so)-----------------------20