生成函数
定义
生成函数将数列转化成函数的形式处理。数列中的每一个数依次对应函数中的系数。具体而言,有
比较显而易见的特点是,如果系数所对应的序列有通项公式,则系数就是通项公式,如
对于
基本运算
事实上,运算时我们就将生成函数视为普通函数运算。
设函数
加减法直接对位相加
乘法就是普通卷积
封闭形式
听起来有些神奇,我们可以将一个无限的生成函数转化为封闭形式。最经典的是:
观察一下显然有
解方程立得
这个式子在生成函数转封闭形式的时候非常常用。
将封闭形式转化成通项公式的常规方法是待定系数法。如
我们将其拆分为和的形式,形如
显然这几项可以通分变为原式。直接解方程即可(直接通分后拆开括号对应系数)。
再求对应的生成函数的展开式的系数,加起来就是生成函数的通项公式。通用的解法是广义二项式定理展开。
广义二项式定理:
展开后就很好做了。注意展开前先满足广义二项式定理的形式。
P10780 BZOJ3028 食物
非常经典的例题。
- 将每种食物能选试做1,选不了试做0,发现对应的生成函数的乘积就是方案数。将所有食物乘起来对应的系数就是总方案数。
乘出来生成函数是
同样是二项式定理
对
广义二项式系数
因此,展开式为:
将生成函数乘以
通过改变索引
因此,生成函数
对于
因此
生成函数
答案就是这个了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比