有n种硬币,面值分别为v1,v2,....,vn,数量无限。输入非负整数s,选用硬币,使其和为s。要求输出最少的硬币组合。
#include<bits/stdc++.h> using namespace std; const int money=251; const int value=5; int type[value]={1,5,10,25,50}; int MIN[money]; void solve(){ for(int k=0;k<money;k++) MIN[k]=INT_MAX; MIN[0]=0; for(int j=0;j<value;j++) for(int i=type[j];i<money;i++) MIN[i]=min(MIN[i],MIN[i-type[j]]+1); } int main() { int s; solve(); while(cin>>s) cout<<MIN[s]<<endl; return 0; }