主要还是借助増维度的方式来记录数据.....然后滚动即可!!!
感谢羊大神!!!!!!!!
#include<cstdio>
#include<cstring>
struct noi{
int val;
int amo;
};
int main()
{
int coffee,i,j,T[10000][5]={0};
noi coin[4];
while(scanf("%d%d%d%d%d",&coffee,&coin[0].amo,&coin[1].amo,&coin[2].amo,&coin[3].amo)!=EOF){
if(coffee==0&&coin[0].amo==0&&coin[1].amo==0&&coin[2].amo==0&&coin[3].amo==0)break;
memset(T,0,sizeof(T));
coin[0].val=1,coin[1].val=5,coin[2].val=10,coin[3].val=25;
for(i=0;i<4;i++){
for(j=coin[i].val;j<=coin[i].val*coin[i].amo&&j<=coffee;j++){
// printf("%d %d %d %d\n",i+1,j,T[j][0],T[j-coin[i].val][0]+1);
if(T[j][0]<T[j-coin[i].val][0]+1){
T[j][0]=T[j-coin[i].val][0]+1;
T[j][1]=T[j-coin[i].val][1];
T[j][2]=T[j-coin[i].val][2];
T[j][3]=T[j-coin[i].val][3];
T[j][4]=T[j-coin[i].val][4];
T[j][i+1]++;
}
}
}
// printf("total?%d\n",T[coffee][0]);
if(T[coffee][0]==0)printf("Charlie cannot buy coffee.\n");
else printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",T[coffee][1],T[coffee][2],T[coffee][3],T[coffee][4]);
}
return 0;
}