动态规划模板4|完全背包问题模板代码

完全背包 物品可以取无限件

思路一:状态转移方程外层加一层循环

思路二:等效于用dp[i][v-c[i]去更新dp[i][v](顺序更新小推大)

代码一:在0-1背包基础上外加一层循环,枚举数量k,(k * c[i] < =j) 也就等于多重背包的思想

for(int i=1;i<=n;i++){
    for(int j=0;j<=v;j++){
        for(int k = 0;k * c[i] <= j;k++){
            dp[i][j] = max(dp[i-1][j-c[i] *k] + w[i] * k , dp[i][j];
        }
    }
}

代码二:二维数组,无需枚举k

代码三:一维数组,顺序小推大

for (int i = 1; i <= n; ++ i)
    for (int j = c[i]; j <= v; ++ j)
        dp[j] = max(dp[j - c[i]] + w[i], dp[j]);

思路四:二进制优化,

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