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

问题描述:
有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]);
		}
	}
}

你可能感兴趣的:(动态规划)