作业介绍
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 小时