简单题吧,只要把多项式相乘的原理搞明白了,应该很容易想到思路,可能表达上还略微有点不太顺畅
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int res[255][105];//第一个中括号表示金额,第二个中括号表示硬笔数量,值表示有多少种方法 5 int tmp[255][105]; 6 int main () 7 { 8 memset(res,0,sizeof(res)); 9 memset(tmp,0,sizeof(tmp)); 10 int value[]={0,1,5,10,25,50}; 11 int i,j,k,t; 12 for(i=0;i<=100;i++) res[i][i]=1;//初始化第一个表达式 13 for(i=2;i<=5;i++) 14 { 15 for(j=0;j<=250;j++) 16 { 17 for(k=0;k+j<=250;k=k+value[i]) 18 { 19 for(t=0;t+k/value[i]<=100;t++) 20 { 21 tmp[j+k][t+k/value[i]]+=res[j][t]; 22 } 23 } 24 } 25 for(j=0;j<=250;j++) 26 { 27 for(t=0;t<=100;t++) 28 { 29 res[j][t]=tmp[j][t]; 30 tmp[j][t]=0; 31 } 32 } 33 } 34 int ans=0; 35 int money; 36 while(cin>>money) 37 { 38 ans=0; 39 for(t=0;t<=100;t++) 40 { 41 ans=ans+res[money][t]; 42 } 43 cout<<ans<<endl; 44 } 45 return 0; 46 }
哦,就这样