- 分析
这道题是一个完全背包的题目,dp[i][j]的定义如下:若只使用前i个物品,当背包容量为j时,有dp[i][j]种方法可以装满背包。 - 代码
class Solution {
public:
int change(int amount, vector<int>& coins) {
int m = coins.size();
vector<vector<int>> dp(m + 1, vector(amount + 1, 0));
for(int i = 0; i <= m; i++) dp[i][0] = 1;
for(int i = 1; i <= m; i++){
for(int j = 1; j <= amount; j++){
if(j - coins[i - 1] >= 0){
dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i - 1]];
}else{
dp[i][j] = dp[i - 1][j];
}
}
}
return dp[m][amount];
}
};