动态规划模板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]);