先找到所有可能 ,再找到最少的
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
int q,d,n,p;
};
bool comp(const node &node1,const node &node2){
return (node1.q+node1.d+node1.n+node1.p)<=(node2.q+node2.d+node2.n+node2.p);
}
int main(){
int q,d,n,p,c;
//ifstream cin("1.txt");
while(cin>>q>>d>>n>>p>>c){
if(q==0&&d==0&&n==0&&p==0&&c==0)
break;
int sum0,sum1,sum2,sum3;
vector<node> vnode;
for(int i=0;i<=q;++i){
sum0=i*25;
if(sum0>c)
break;
if(sum0==c){
node node1;
node1.q=i;
node1.d=0;
node1.n=0;
node1.p=0;
vnode.push_back(node1);
}
for(int j=0;j<=d;++j){
sum1=sum0+j*10;
if(sum1>c)
break;
if(sum1==c){
node node1;
node1.q=i;
node1.d=j;
node1.n=0;
node1.p=0;
vnode.push_back(node1);
}
for(int k=0;k<=n;++k){
sum2=sum1+k*5;
if(sum2>c)
break;
if(sum2==c){
node node1;
node1.q=i;
node1.d=j;
node1.n=k;
node1.p=0;
vnode.push_back(node1);
}
for(int l=0;l<=p;++l){
sum3=sum2+l*1;
if(sum3>c)
break;
if(sum3==c){
node node1;
node1.q=i;
node1.d=j;
node1.n=k;
node1.p=l;
vnode.push_back(node1);
}
}
}
}
}
if(vnode.size()>0){
sort(vnode.begin(),vnode.end(),comp);
cout<<"Dispense "<<vnode[0].q<<" quarters, "<<vnode[0].d<<" dimes, "<<vnode[0].n<<" nickels, and "<<vnode[0].p<<" pennies."<<endl;
}else{
cout<<"Cannot dispense the desired amount."<<endl;
}
}
return 0;
}