#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
#include<stack>
#define ll long long
using namespace std;
struct node
{
int sum;//錢幣總數
int c[5];//每種錢幣已取數量
} dp[10010];
int price[10]= {0,1,5,10,25},c[10];
int p;
int main()
{
while(~scanf("%d%d%d%d%d",&p,&c[1],&c[2],&c[3],&c[4]))
{
if(p+c[1]+c[2]+c[3]+c[4]==0)break;
memset( dp,-1,sizeof dp);
dp[0].sum=dp[0].c[1]=dp[0].c[2]=dp[0].c[3]=dp[0].c[4]=0;
for(int i=1; i<=4; i++)
for(int j=price[i]; j<=p; j++)
{
if(dp[j-price[i]].sum!=-1)
if(dp[j].sum<dp[j-price[i]].sum+1&&dp[j-price[i]].c[i]<c[i])
{
dp[j]=dp[j-price[i]];
dp[j].sum++;
dp[j].c[i]++;
}
}
if(dp[p].sum>0)
printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",dp[p].c[1],dp[p].c[2],dp[p].c[3],dp[p].c[4]);
else
printf("Charlie cannot buy coffee.\n");
}
return 0;
}
POJ - 1787 Charlie's Change (揹包+記錄路徑)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.