dp[i] 表示 组成 i 元钱时需要的最少硬币数。
状态转移方程:dp[j]=min(dp[j],dp[j-coins[i]]+1);
用当前硬币coins[i],dp等于减去该硬币面值时的dp加上当前硬币数1,不断比较,取最小值。
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int dp[100000],len=coins.size();
fill(dp,dp+100000,1<<27);
dp[0]=0;
for(int i=0;i<len;i++)
for(int j=coins[i];j<=amount;j++)
dp[j]=min(dp[j],dp[j-coins[i]]+1);
return dp[amount]==1<<27?-1:dp[amount];
}
};