本题的链接为:找单词,本题用到的知识点为母函数,不懂的请先自行百度学习。下面贴下本题代码:
//母函数 : 3层for循环,最外层,记录它正在与第几个多项式相乘,第二层,表示c1中的每一项,第三层表示后面被乘多项式的每一项
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 27;
int num[maxn];//代表数量
int c1[51], c2[51];//c1保存当前得到的多项式各项系数,c2保存每次计算时临时结果
int main()
{
int i, j, n, cnt, T;
cin >> T;
while (T--)
{
cnt = 0;
memset(c1, 0, sizeof(c1));
memset(c2, 0, sizeof(c2));
for (i = 1; i <= 26; i++)
{
cin >> num[i];
}
for (i = 0; i <= num[1] && i <= 50; i++) //初始化第一个多项式
c1[i] = 1;
for (i = 2; i <= 26; i++)//要乘剩下的25个多项式
{
for (j = 0; j <= 50; j++)//c1的各项的指数
{
for (n = 0; n <= num[i] * i && (n + j <= 50); n += i) //num[i] * i 表示被乘多项式各项的指数,(X^0*i + X^1*i+X^2*i+....)
{
c2[n + j] += c1[j];
}
}
for (j = 0; j <= 50; j++)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
for (j = 1; j <= 50; j++)
cnt += c1[j];
cout << cnt << endl;
}
return 0;
}