动态规划
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
if(amount==0)return 0;
sort(coins.begin(),coins.end());
if(coins[0]>amount)return -1;
vector<int>v(amount+1,-1);
v[0]=0;
for(int i:coins)
if(i<=amount) v[i]=1;
else break;
for(int i=coins[0];i<=amount;i++){
int min_n=INT_MAX;
for(int j:coins){
if(i-j>=0){
if(v[i-j]>=0)min_n=min(v[i-j]+1,min_n);
}else break;
}
if(min_n!=INT_MAX)v[i]=min_n;
// cout<<i<<" "<<v[i]<<endl;
}
return v[amount];
}
};