hdu 2082 找单词(组合数学【母函数】第一弹) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2082
题目分析:种类计数的,母函数可以解决。
code:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,t,n,a[60],b[60];
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
a[0]=1;
for(i=1;i<=26;i++)
{//字母1~26分别是1~26分
scanf("%d",&n);
if(n==0)continue;
for(j=0;j<=50;j++)
{
for(k=0;k<=n*i&&k+j<=50;k+=i)
{
b[k+j]+=a[j];
}
}
for(j=0;j<=50;j++)
{
a[j]=b[j];
b[j]=0;
}
}
int ans=0;
for(i=1;i<=50;i++)
{
ans+=a[i];
}
printf("%d\n",ans);
}
return 0;
}
PS:传言母函数很简单,但我还是没能秒懂……第一弹是抄的