动态规划模板5|多重背包问题模板代码


思路一:多一层枚举,枚举k,k表示取得当前物品的数量
for(int i = 1;i<=n;i++){
for(Int j=0;j<=v;j++){
for(int k = 0;k<=num[i];k++){
if(j>=c[i]*k){
dp[i][j] = max(dp[i-1][j-c[i] * k] + w[i] * k,dp[i][j];
}
}
}
}
思路二:同样可以像0-1背包问题那样使用空间优化,一维数组按照从大到小的顺序枚举背包体积j。
思路三:可以使用二进制优化,优化选取的k的个数。


浙公网安备 33010602011771号