原题链接:HDU's ACM 2082 找单词
分析:这依旧是一道母函数的题目。如下分析:字母A表示为(1+x^1+x^2+x^3+...+x^numOfCharA),即指数表示选中时的分数,一直有numOfCharA个;依次类推,用常见的母函数就可以解决。
注意:x^0的系数不能算入最后答案,或者也可以在一开始时就将字母A表示为(x^1+x^2+...+x^numOfCharA)
AC Code:
<span style="font-family:Microsoft YaHei;font-size:14px;">#include <stdio.h>
#include <string.h>
#define CHARNUM 26
#define MAXTARGET 50
#define MAXN 100
int numOfChar[CHARNUM+1];
int coeff1[MAXN];
int coeff2[MAXN];
int main()
{
int N;
int i, j, k;
int res;
scanf("%d", &N);
while(N--){
memset(coeff1, 0, sizeof(int)*MAXN);
memset(coeff2, 0, sizeof(int)*MAXN);
for(i=0;i<CHARNUM;++i)
scanf("%d", numOfChar+i);
for(i=0;i<=numOfChar[0];++i)
coeff1[i] = 1;
for(i=1;i<CHARNUM;++i){
for(j=0;j<=MAXTARGET;++j)
for(k=0;k<=numOfChar[i] && (j+k*(i+1))<=MAXTARGET;++k)
coeff2[j+k*(i+1)] += coeff1[j];
memcpy(coeff1, coeff2, sizeof(int)*MAXN);
memset(coeff2, 0, sizeof(int)*MAXN);
}
res = 0;
for(i=1;i<=MAXTARGET;++i)
res += coeff1[i];
printf("%d\n", res);
}
return 0;
}</span>