解法同UVa 147 http://blog.youkuaiyun.com/rising_fallmoon/article/details/10335579。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define max(i,j) (i>j?i:j)
#define maxn 30005
const int value[5] = { 1, 5, 10, 25, 50 };
long long nWay[maxn];
int main()
{
int Money;
for(int i=0; i<maxn; i++) nWay[i] = 1;
for(int i=1; i<5; i++)
for(int j=1; j<=30000; j++) if(j>=value[i])
nWay[j] += nWay[j-value[i]];
while(cin >> Money)
{
if(nWay[Money]==1) printf("There is only 1 way to produce %d cents change.\n",Money);
else printf("There are %lld ways to produce %d cents change.\n",nWay[Money],Money);
}
return 0;
}