题记:f[i][j]用于表示用j个硬币实现金额为i的情况数量。注意硬币不能超过100个。
#include<iostream>
#include<cstring>
using namespace std;
const int N=101,M=251;
int coins[]={1,5,10,25,50};
int f[M][N];//用j个硬币实现金额i
int ans[M];
void solve(){
f[0][0]=1;
for(int i=0;i<5;i++)
for(int j=1;j<N;j++)
for(int k=coins[i];k<M;k++)
f[k][j]+=f[k-coins[i]][j-1];
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
ans[i]+=f[i][j];
}
int main(){
int n;
solve();
while(cin>>n){
cout<<ans[n]<<endl;
}
return 0;
}