动态规划模板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的个数。

posted @ 2019-01-25 11:24  fishers  阅读(372)  评论(0编辑  收藏  举报