作业介绍


dp[i][j]:在前i件物品中选择,背包容量为j时的最大价值

1.装不下  w[i]>j  物品体积大于背包容量   装不下,不需要考虑第i个物品装的情况
此时的问题变成了  :考虑装前i-1个物品,在背包容量为j时的最大价值==dp[i-1][j];

2.装得下:w[i]<=j  物品体积小于等于背包容量 
不装第i件物品:dp[i][j]=dp[i-1][j];
  装第i件物品:留给前i-1件物品的体积为j-w[i].
  此时的问题变成:考虑装前i-1个物品,在背包容量为j-w[i]时的最大价值==dp[i-1][j-w[i]]加上第i件物品的价值; 
			 :dp[i][j]=dp[i-1][j-w[i]] + v[i];

	综合:dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]] + v[i]);

最后的答案存放在dp[n][w];

伪代码:
循环枚举前i个商品i:1----n
	循环枚举背包的容量j:0----w
		判断此时的j能不能装下第i件商品
			不能   ....
			能     ....
cout<<dp[n][w]; 
			 
 

  
 

状态
已结束
题目
14
开始时间
2025-5-14 0:00
截止时间
2025-5-31 23:59
可延期
24 小时