https://leetcode.com/problems/coin-change-2/description/
class Solution {
public:
int change(int amount, vector<int>& coins) {
vector<int> dp(amount+1); //dp[x] 总金额为x时硬币组合数
dp[0] = 1; //面值为0只有1种组合方式
for(int i=0; i<coins.size(); i++){ //前i种硬币凑成指定面值
for(int j=1; j<=amount; j++){ // 目标面值,从1到amount
if(j>=coins[i]){
dp[j] += dp[j-coins[i]];
}
}
}
return dp[amount];
}
};