定义
又称母函数
是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。
母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。
普通母函数
定义:
性质
操作
放缩
加减法
右移(右移k位=在前面补k个0)
求导(左移一位,系数乘以下标)
卷积规则
1/(1-x)m
那么 g(x) 中 xn 的系数gn就是x1+x2+…+xm=n的非负整数解个数,显然通过插板法得gn=C(m+n-1,m-1)
指数母函数
定义
该函数符合上述卷积规则
性质
<1,1,1,1……>
Taylor展开得
取 x0=0,f(x)=ex 得
即 <1,1,1……> 的闭形式为 ex
左移右移
通过求导
卷积
(图片摘自一些论文)
例题
可以看做每一个数都可以无限取
于是生成函数为:
(1+x+x2+x3….)(1+x2+x4+….)……(1+xn)
#include<bits/stdc++.h>
using namespace std;
const int N=277;
int f[N],g[N];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<=n; i++) f[i]=1,g[i]=0;
for(int i=2; i<=n; i++)
{
for(int j=0; j<=n; j++) for(int k=0; k+j<=n; k+=i)
g[k+j]+=f[j];
for(int j=0; j<=n; j++) f[j]=g[j],g[j]=0;
}
printf("%d\n",f[n]);
}
}
HDU2110
#include<bits/stdc++.h>
using namespace std;
int n,yjy[105],aii[105],m,f[10010],g[10010];
int main()
{
while(~scanf("%d",&n),n)
{
m=0;
for(int i=0; i<n; i++)
{
scanf("%d%d",&yjy[i],&aii[i]);
m+=(yjy[i]*aii[i]);
}
if(m%3!=0)
{
printf("sorry\n");
continue;
}
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
m/=3;
for(int i=0; i<=aii[0]&&i*yjy[0]<=m; i++)
{
f[i*yjy[0]]=1;
}
for(int i=1; i<n; i++)
{
for(int j=0; j<=m; j++)
for(int k=0; k<=aii[i]&&k*yjy[i]+j<=m; k++)
{
g[k*yjy[i]+j]+=f[j];
g[k*yjy[i]+j]%=10000;
}
for(int j=0; j<=m; j++)
{
f[j]=g[j];
g[j]=0;
}
}
if(f[m]!=0)
{
printf("%d\n",f[m]);
}
else printf("sorry\n");
}
}