题目大意:原理同UVA674,求凑钱种数
解题策略:DP,状态转移方程同674,大小开到30000+,注意数组溢出
/*
UVA 357 Let Me Count The Ways
AC by J.Dark
ON 2013/3/12
Time 0.028s
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 30005;
unsigned long long int dp[maxn];
int coin[5]={1, 5, 10, 25, 50};
/
void solve(){
memset(dp, 0, sizeof(dp));
dp[0] = 1;
for(int i=0; i<5; i++){
//j=coin[i],这里是wa点
for(int j=coin[i]; j<=maxn; j++){
dp[j] += dp[j-coin[i]];
}
}
}
int main(){
int N;
solve();
while(cin >> N)
{
//cout << N << endl;
if(dp[N] != 1){
printf("There are %llu ways to produce ", dp[N]);
//printf("There are %d ways to produce %d cents change.\n", dp[N], N);
printf("%d cents change.\n", N);}
else
printf("There is only 1 way to produce %d cents change.\n", N);
}
//system("pause");
return 0;
}