1、 如果我们用最少k枚硬币拼出所需的amount
2、 那么k-1枚硬币一定拼出最少的amount-coin[k] // k={1,2,3…n}
3、 所以原来的coin[1]+coin[2]+…+coin[k]=amount
4、 coin[1]+coin[2]+…+coin[k-1]=amount-coin[k] // k={1,2,3…n}
而此时,大问题就转化为了子问题
假设 我们用num_coin(x)表示硬币拼出x的最少个数
所以
#includeusing namespace std; int MinCoin(int coin[],int money,int n){ int num_coin[money+1]={0}; for(int m=1;m<=money;m++){ num_coin[m]=1000000; for(int i=0;i =0) num_coin[m]=num_coin[m]<(num_coin[m-coin[i]]+1)?num_coin[m]:(num_coin[m-coin[i]]+1); } } if(num_coin[money]==1000000) return -1; else return num_coin[money]; } int main(){ int coin[]={1,2,5}; int amount; cin>>amount; // cout<



