【持续更新】生成函数学习笔记

定义

又称母函数
是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。

母函数可分为很多种,包括普通母函数、指数母函数、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
在这里插入图片描述
左移右移
通过求导

卷积
在这里插入图片描述
(图片摘自一些论文)

例题

HDU1028

可以看做每一个数都可以无限取
于是生成函数为:
(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");
		}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值