0-1背包问题 和 完全背包问题 的区别在于:
前者每个物品的个数是有限的;后者每个物品的个数是无限的。
也就是为什么当选择将当前物品放进背包时,完全背包是dp[i][…]而不是dp[i-1][…]
动态规划框架:
0-1背包模板:
完全背包模板:
for(int i=1;i<=n;i++){
for(int j=1;j<=amount;j++){
if(j<coins[i-1]){
dp[i][j] = dp[i-1][j];
}
else{
dp[i][j] = dp[i-1][j]+dp[i][j-coins[i-1]];
//注意是如果放进背包是dp[i]代表可重复
}
}
}
return dp[n][amount];