思路:转化为母函数求种数,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; }