Problem - 2069http://acm.hdu.edu.cn/showproblem.php?pid=2069
#include <iostream>
using namespace std;
typedef long long ll;
const int MONEY = 251, COIN = 101, N = 5;
const int TYPE[N] = {1,5,10,25,50};
int ans[MONEY] = {0};
int dp[MONEY][COIN] = {0}; // dp[i][j]表示用j个硬币凑出金额i的方案数
void init() {
dp[0][0] = 1;
for (int k = 0; k < N; k++) {
for (int i = TYPE[k]; i < MONEY; i++) {
for (int j = 1; j < COIN; j++) {
dp[i][j] += dp[i - TYPE[k]][j - 1];
}
}
}
for (int i = 0; i < MONEY; i++) {
for (int j = 0; j < COIN; j++) {
ans[i] += dp[i][j];
}
}
}
int main() {
init();
int money;
while (cin >> money) {
cout << ans[money] << endl;
}
return 0;
}