题目
题解思路
直接用母函数把幂次小于等于 50 大于0的 系数全加起来即可。
有关母函数 和 多项式乘法 的证明和讲解见 链接
AC代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int a[30];
ll tmi[200];
ll ans[200];
int main()
{
int t;
cin>>t;
while(t--)
{
memset(ans,0,sizeof(ans));
memset(tmi,0,sizeof(tmi));
for (int i = 1 ; i <= 26 ; i++ )
{
int uio;
cin>>uio;
a[i] = uio ;
}
ans[0] = 1 ;
for (int i = 1 ;i <= 26 ; i++ )
{
for (int k = 0 ; k <= 50 ; k++ )
{
int p = 0, s = 0;
for (;p + k <= 50 && s <= a[i] ;p += i, s++)
{
tmi[ p + k ] += ans [k];
}
}
for (int k = 0 ; k <= 50 ; k++ )
{
ans [k] = tmi[k] ;
tmi[k] = 0;
}
}
ll anss = 0;
for (int k = 1 ; k <= 50 ; k++ )
{
anss += ans[k];
}
cout<<anss<<"\n";
}
return 0;
}