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;    
}