普通型生成函数(Ordinary Generation Function)
对于一个无穷数列 f0,f1,f2,⋯ f 0 , f 1 , f 2 , ⋯
将其看做一个无穷维向量,写出其形式幂级数:
f(x)=∑∞i=0fixi f ( x ) = ∑ i = 0 ∞ f i x i
例:数列 1,1,1,⋯ 1 , 1 , 1 , ⋯ 的生成函数为:
f(x)=1+x+x2+⋯ f ( x ) = 1 + x + x 2 + ⋯
x x 没有实际含义(形式幂级数),故不考虑收敛域
二次项系数生成函数为 (1+x)a ( 1 + x ) a
设方程 e1+e2+⋯+ek=n e 1 + e 2 + ⋯ + e k = n 的非负整数解的方案为 hn h n ,则 hn h n 的生成函数为 e1,e2,⋯,ek e 1 , e 2 , ⋯ , e k 的生成函数的乘积
例:考虑 3e1+4e2+2e3+5e4=n 3 e 1 + 4 e 2 + 2 e 3 + 5 e 4 = n 的非负整数解的方案书数 hn h n 的生成函数
令 f1=3e1,f2=4e2,f3=2e3,f4=5e4 f 1 = 3 e 1 , f 2 = 4 e 2 , f 3 = 2 e 3 , f 4 = 5 e 4 ,得到
f1+f2+f3+f4 f 1 + f 2 + f 3 + f 4 ,且 f f 的约束是:为上述关于系数的倍数
每一项的系数为取值,将加法转化为乘法
普通型生成函数题目
BZOJ 3028 食物
指数生成函数(Exponential Generation Function)
对于数列 f0,f1,f2,⋯ f 0 , f 1 , f 2 , ⋯ ,其指数型生成函数为
f(x)=∑∞i=0fii!xi f ( x ) = ∑ i = 0 ∞ f i i ! x i
例:数列 1,1,1,⋯ 1 , 1 , 1 , ⋯ 的指数型生成函数为
f(x)=∑∞i=01i!xi f ( x ) = ∑ i = 0 ∞ 1 i ! x i
f(x)=ex f ( x ) = e x 的麦克劳林级数为
∑∞i=0fi(x)i!xi ∑ i = 0 ∞ f i ( x ) i ! x i
由自然对数性质可得 fi(x)=ex,fi(0)=1 f i ( x ) = e x , f i ( 0 ) = 1
即 ex=∑∞i=01i!xi e x = ∑ i = 0 ∞ 1 i ! x i
由 Pin=Cin∗i! P n i = C n i ∗ i !
P0n,P1n,P2n,⋯,Pnn P n 0 , P n 1 , P n 2 , ⋯ , P n n 的指数生成函数是 (1+x)n ( 1 + x ) n
定义多重集的排列组合
S={ni⋅ai}(ni=0,1,2,⋯,k) S = { n i · a i } ( n i = 0 , 1 , 2 , ⋯ , k ) ,表示 S S 集合中有个 ai a i , ni n i 被称为元素 ai a i 的重数, k k 称为多重集的类别数
多重集的 n n 排列数的指数生成函数是
相当于 ∞ ∞ 个全 1 1 数列指数生成函数的乘积
相当于是枚举对于每一个元素,选择多少个,将其放入序列中有多少种不同的方法,最后求乘积和
最终答案为 n!∗ n ! ∗ ( xn x n 的系数)
结合 n n 排列数公式
Problem
确定用红、白、蓝三色给 1×n 1 × n 的棋盘的着色中,红格数是偶数,且至少有一个蓝格的着色方法数 hn h n
红: ∑∞i=012i!x2i ∑ i = 0 ∞ 1 2 i ! x 2 i
蓝: ∑∞i=11i!xi ∑ i = 1 ∞ 1 i ! x i
白: ∑∞i=01i!xi ∑ i = 0 ∞ 1 i ! x i
h(x)=(∑∞i=012i!x2i)(∑∞i=11i!xi)(∑∞i=01i!xi) h ( x ) = ( ∑ i = 0 ∞ 1 2 i ! x 2 i ) ( ∑ i = 1 ∞ 1 i ! x i ) ( ∑ i = 0 ∞ 1 i ! x i )
h(x)=ex+e−x2ex(ex−1) h ( x ) = e x + e − x 2 e x ( e x − 1 )
h(x)=e3x−e2x+ex−12 h ( x ) = e 3 x − e 2 x + e x − 1 2
ex=∑∞i=01i!xi e x = ∑ i = 0 ∞ 1 i ! x i
h(x)=−12+∑∞i=0(3x)i−(2x)i+xi2∗i! h ( x ) = − 1 2 + ∑ i = 0 ∞ ( 3 x ) i − ( 2 x ) i + x i 2 ∗ i !
BZOJ 3771 Triple
BZOJ 3456 城市规划
BZOJ 3059 COUNTARI
生成函数求数列通项
hn=5hn−1−6hn−2(n≥2),h0=1,h1=2 h n = 5 h n − 1 − 6 h n − 2 ( n ≥ 2 ) , h 0 = 1 , h 1 = 2
将其用生成函数形式写出, n n 次项用次项代替,得
h(x)=5x(h(x)−h0)−6x2h(x)+(h0−h1x) h ( x ) = 5 x ( h ( x ) − h 0 ) − 6 x 2 h ( x ) + ( h 0 − h 1 x )
将 h0,h1 h 0 , h 1 代入, h(x) h ( x ) 移至一侧,得
将其化为 S1−rx S 1 − r x 的形式,得
最后用形式幂级数表示