题目链接:
https://vjudge.net/contest/348156#problem/E
题面:
翻译:
假设有5种硬币:50美分、25美分、10美分、5美分和1美分。我们想
用这些硬币兑换一定数量的钱。
例如,如果我们有11美分,那么我们可以用一枚10美分的硬币和一枚1美分的硬币来做改变
硬币,两枚5美分硬币和一枚1美分硬币,一枚5美分硬币和六枚1美分硬币,或十一枚1美分硬币。
所以有四种方法可以用上面的硬币兑换11美分。请注意,我们将其计算在内
有一种方法可以零钱换零钱。
编写一个程序,找出对任意数量的
以美分计的钱。你的程序应该能处理高达7489美分。
输入:
输入文件包含任意数量的行,每一行包含一个金额的数字
以美分计。
输出:
对于每个输入行,输出一行,其中包含使用
五种以上的硬币。
思路:
这道题目思路看https://blog.csdn.net/qq_45740533/article/details/103612924
参考代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
long long t;
while(scanf("%lld",&t)!=EOF)
{
int a[10],i,j;
int dp[50000];
memset(dp,0,sizeof(dp));//对dp数组先进行清零
a[1]=1;
a[2]=5;
a[3]=10;
a[4]=25;
a[5]=50;//把每种硬币直接存储到一个数组中去
dp[0]=1;
for(i=1;i<=5;i++)
{
for(j=a[i];j<=t;j++)
{
dp[j]=dp[j]+dp[j-a[i]];
}
}
printf("%d\n",dp[t]);
}
}