ps:get到了母函数...看了好久的模板与介绍....似懂非懂..决定要多找些题来试试...
代码:
#include "stdio.h" #include "string.h" int cal(int m2[]); int main(){ int T,i,sum; int c2[27]; scanf("%d",&T); while(T--){ for(i=1;i<27;i++) scanf("%d",&c2[i]); sum=cal(c2); printf("%d\n",sum); } return 0; } int cal(int m2[]){ int i,j,k,sum=0; int c1[51],c2[51]; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); //c1用来存结果,c2用来临时保存计算结果 //每次算好结果,就把c2的值给c1,然后再初始化c2. c1[0]=1; for(i=1;i<=26;i++){ //26个多项式相乘,循环26次 c1[3]代表x^3的系数 for(j=0;j<=50;j++){ //从0到50遍历,因为指数代表分数,每个指数都考虑一次,不管有没有 for(k=0;k<=m2[i] && j+k*i<=50;k++){ //注意这里m2数组里是i决定,就是外层的j无论循环几次 //都是由最外层的循环i决定的 //j代表是前面的多项式,k代表是现在被乘的多项式 //c1[j]*c[k*i] 指数相加,系数也相加,系数相加的是c[j]的系数. c2[j+k*i]+=c1[j]; //c2[0]=1,k++,c2[1]=1,c2[3]=1,c2[4]=1... //j=1,c2[1]=c1[1]=1,c2[1+1]=c2[2],c2[2]+=c1[2] c2[2]=c2[2]+0... //c2[50]+=c1[50] } } for(j=0;j<=50;j++){ c1[j]=c2[j]; c2[j]=0; } } for(i=1;i<=50;i++){ sum+=c1[i]; } return sum; }