思路:转化为母函数求种数,x的指数表示价值,系数表示种数。则对于第一个样例,可表示为(x+1)*(x^2+1)*(x^3+1),展开为x^6+x^5+x^4+2x^3+x^2+x+1,所以种数为1+1+1+2+1+1=7。
#include<iostream>
#include<cstdio>
using namespace std;
int num[26];
int a[51],b[51];
int main()
{
int t,i,j,k,ans;
cin>>t;
while(t--)
{
for(i=0;i<26;i++)
scanf("%d",num+i);
for(i=0;i<=50;i++)
a[i]=b[i]=0;
a[0]=1;
for(i=0;i<26;i++)
{
for(j=i+1;j<=num[i]*(i+1);j+=(i+1))
for(k=0;k+j<=50;k++)
if(a[k])
b[k+j]+=a[k];
for(j=0;j<=50;j++)
{
a[j]+=b[j];
b[j]=0;
}
}
ans=0;
for(i=1;i<=50;i++)
ans+=a[i];
printf("%d\n",ans);
}
return 0;
}