简单题吧,只要把多项式相乘的原理搞明白了,应该很容易想到思路,可能表达上还略微有点不太顺畅
1 #include2 #include 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< <
哦,就这样