0
点赞
收藏
分享

微信扫一扫

动态规划背包问题——多重背包

问题描述:
有n件物品,它们的重量分别是wi,它们的体积分别是vi,他们的数目分别是ni,现在给你个体积为C的背包,如何让背包里装入的物品具有最大的重量总和。

问题分析:
只需要在完全背包的基础上加一个遍历这个物品个数的判断就好。
在一个需要注意的就是如果用二维数组的话,时间复杂的很大,所以采用一维数组存储。这个时候就需要采用从上到下,从右到左的遍历顺序。

代码:

for (int i=1; i<=n; i++){
for (int j=m; j>=0; j--){
for (int k=0; k<=n[i]; k++){
if (j-k*v[i]<0) break;
f[j]=max(f[j], f[j-k*v[i]]+k*w[i]);
}
}
}


举报

相关推荐

0 条评论