原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069
代码参考自《算法竞赛入门到进阶》
#include<bits/stdc++.h>
using namespace std;
const int coin=101;
const int money=251;
int dp[money][coin]={0};
int type[5]={1,5,10,25,50};
void solve(){
dp[0][0]=1;
for(int i=0;i<5;i++)
for(int j=1;j<coin;j++)
for(int k=type[i];k<money;k++)
dp[k][j]+=dp[k-type[i]][j-1];
}
int main(){
int s;
int ans[money]={0};
solve();
for(int i=0;i<money;i++)
for(int j=0;j<coin;j++)
ans[i]+=dp[i][j];
while(cin>>s)
cout<<ans[s]<<endl;
return 0;
}