第一道记录路径的题目
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 1998 | Accepted: 476 |
Description
Input
Output
Sample Input
12 5 3 1 2 16 0 0 0 1 0 0 0 0 0
Sample Output
Throw in 2 cents, 2 nickels, 0 dimes, and 0 quarters. Charlie cannot buy coffee.
#include
#include<string.h>
int v[4]={1,5,10,25};
int dp[10010];
int p[10010],used[10010];
int num[4],ans[30];
int main()
{
int m,i,j;
while(scanf("%d",&m)!=EOF)
{
int sum=m;
for(i=0;i<4;i++)
{
scanf("%d",&num[i]);
sum+=num[i];
}
if(sum==0) break;
memset(dp,0,sizeof(dp));
memset(p,0,sizeof(p));
p[0]=-1;dp[0]=1;
for(i=0;i<4;i++)
{
memset(used,0,sizeof(used));
for(j=v[i];j<=m;j++)
if((!dp[j]||dp[j-v[i]]+1>dp[j])&&dp[j-v[i]]&&used[j-v[i]]{
dp[j]=dp[j-v[i]]+1;
used[j]=used[j-v[i]]+1;
p[j]=j-v[i];
}
}
memset(ans,0,sizeof(ans));
if(dp[m])
{
i=m;
while(1)
{
if(p[i]==-1) break;
ans[i-p[i]]++;
i=p[i];
}
printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",ans[1],ans[5],ans[10],ans[25]);
}
else printf("Charlie cannot buy coffee.\n");
}
return 0;
}