OGF
记数列 { a i } \{a_i\} {ai} 的生成函数为 ∑ k = 0 ∞ a k x k \sum\limits_{k=0}^{\infty} a_kx^k k=0∑∞akxk .
常用的生成函数有
- 1 1 − x = 1 + x + x 2 + … = ∑ k = 0 ∞ x k \frac{1}{1-x}=1+x+x^2+\ldots =\sum\limits_{k=0}^{\infty}x_k 1−x1=1+x+x2+…=k=0∑∞xk .
- 1 1 − x n = 1 + x n + x 2 n + … = ∑ k = 0 ∞ x k n \frac{1}{1-x^n}=1+x^n+x^{2n}+\ldots=\sum\limits_{k=0}^{\infty}x^{kn} 1−xn1=1+xn+x2n+…=k=0∑∞xkn .
- 1 1 − a x = 1 + a x + a 2 x 2 + … = ∑ k = 0 ∞ a k x k \frac{1}{1-ax}=1+ax+a^2x^2+\ldots=\sum\limits_{k=0}^{\infty}a^kx^k 1−ax1=1+ax+a2x2+…=k=0∑∞akxk .
- 1 ( 1 − x ) n = ∑ k = 0 ∞ ( n + k − 1 k − 1 ) x k \frac{1}{(1-x)^n}=\sum\limits_{k=0}^{\infty}\binom{n+k-1}{k-1}x^k (1−x)n1=k=0∑∞(k−1n+k−1)xk .
前两个等价于等比数列的求和式,根据 x < 1 x<1 x<1 时的收敛性写出的封闭形式.
关于 4 4 4 式提供两种推导:
一
使用广义二项式定理: ( 1 + x ) n = ∑ k = 0 ∞ ( n k ) x k (1+x)^n=\sum\limits_{k=0}^{\infty}\binom{n}{k}x^k (1+x)n=k=0∑∞(kn)xk .
于是 ( 1 − x ) − n = ∑ k = 0 ∞ ( n + k − 1 k ) x k (1-x)^{-n}=\sum\limits_{k=0}^{\infty}\binom{n+k-1}{k}x^k (1−x)−n=k=0∑∞(kn+k−1)xk .
同理可得 ( 1 + x ) − n = ∑ k = 0 ∞ ( − 1 ) k ( n + k − 1 k ) x k (1+x)^{-n}=\sum\limits_{k=0}^{\infty}(-1)^k\binom{n+k-1}{k}x_k (1+x)−n=k=0∑∞(−1)k(kn+k−1)xk .
二
这相当于求解以下问题:
给出 m m m ,问用 n n n 个非负整数求和得到 m m m 的方案数 a m a_m am .
根据插板法可知 a m = ( n + m − 1 n − 1 ) = ( n + m − 1 m ) a_m=\binom{n+m-1}{n-1}=\binom{n+m-1}{m} am=(n−1n+m−1)=(mn+m−1) .
用生成函数即写成 1 ( 1 − x ) m \frac{1}{(1-x)^m} (1−x)m1 .
这同样可以通过麦克劳林展开得到,这里就不过多阐述.
一些很 simple \text{simple} simple 的例子
一
确定苹果、香蕉、橘子和梨的 n n n 组合的个数,其中在每个组合中苹果的个数是偶数,香蕉的个数是奇数,橘子的个数在 0 0 0 和 4 4 4 之间,而且至少要有一个梨。
直接列出生成函数 1 1 − x 2 × x 1 − x 2 × 1 − x 5 1 − x × x 1 − x \frac{1}{1-x^2}\times \frac{x}{1-x^2}\times \frac{1-x^5}{1-x}\times \frac{x}{1-x} 1−x21×1−x2x×1−x1−x5×1−xx ,第 n n n 项系数就是答案.
二
给出递推公式 a n + 1 = 8 a n + 1 0 n a_{n+1}=8a_{n}+10^{n} an+1=8an+10n ,其中 a 1 = 9 a_1=9 a1=9 ,求 { a n } \{a_n\} {an} 的通项公式.
记 G ( x ) = ∑ k = 0 ∞ a k x k G(x)=\sum\limits_{k=0}^{\infty}a_kx^k G(x)=k=0∑∞akxk ,特别的记 a 0 = 1 a_0=1 a0=1 .
由递推式推出:
( 1 − 8 x ) G ( x ) = ∑ k = 1 ∞ 1 0 k − 1 x k + 1 = x ∑ k = 0 ∞ 1 0 k x k + 1 = x 1 − 10 x + 1 = 1 − 9 x 1 − 10 x (1-8x)G(x)=\sum\limits_{k=1}^{\infty}10^{k-1}x^k+1=x\sum\limits_{k=0}^{\infty}10^kx^k+1=\frac{x}{1-10x}+1=\frac{1-9x}{1-10x} (1−8x)G(x)=k=1∑∞10k−1xk+1=xk=0∑∞10kxk+1=1−10xx+1=1−10x1−9x .
进而得到:
G ( x ) = 1 − 9 x ( 1 − 10 x ) ( 1 − 8 x ) = 1 2 ( 1 1 − 10 x + 1 1 − 8 x ) G(x)=\frac{1-9x}{(1-10x)(1-8x)}=\frac{1}{2}(\frac{1}{1-10x}+\frac{1}{1-8x}) G(x)=(1−10x)(1−8x)1−9x=21(1−10x1+1−8x1) .
所以 a n = 1 2 ( 1 0 n + 8 n ) a_n=\frac{1}{2}(10^n+8^n) an=21(10n+8n) .
高级一点的应用
一. Bzoj 3028 食物
明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应
该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。他这次又准备带一些受欢迎的食物,
如:蜜桃多啦,鸡块啦,承德汉堡等等当然,他又有一些稀奇古怪的限制:每种食物的限制如下:
承德汉堡:偶数个
可乐:0个或1个
鸡腿:0个,1个或2个
蜜桃多:奇数个
鸡块:4的倍数个
包子:0个,1个,2个或3个
土豆片炒肉:不超过一个。
面包:3的倍数个
注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛
),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。
直接列出生成函数:
1 1 − x 2 × 1 − x 2 1 − x × 1 − x 3 1 − x × x 1 − x 2 × 1 1 − x 4 × 1 − x 4 1 − x × 1 − x 2 1 − x × 1 1 − x 3 \frac{1}{1-x^2}\times\frac{1-x^2}{1-x}\times\frac{1-x^3}{1-x}\times\frac{x}{1-x^2}\times\frac{1}{1-x^4}\times \frac{1-x^4}{1-x}\times\frac{1-x^2}{1-x}\times\frac{1}{1-x^3} 1−x21×1−x1−x2×1−x1−x3×1−x2x×1−x41×1−x1−x4×1−x1−x2×1−x31 .
整理一下得到:
x ( 1 − x ) 4 \frac{x}{(1-x)^4} (1−x)4x .
即 G ( x ) = x ∑ k = 0 ∞ ( k + 3 3 ) x k G(x)=x\sum\limits_{k=0}^{\infty}\binom{k+3}{3}x^k G(x)=xk=0∑∞(3k+3)xk .
所以 n n n 项的系数就是 ( n + 2 3 ) \binom{n+2}{3} (3n+2) .
二. [CEOI2004] Sweets
John 得到了 n n n 罐糖果。不同的糖果罐,糖果的种类不同(即同一个糖果罐里的糖果种类是相同的,不同的糖果罐里的糖果的种类是不同的)。第 i i i 个糖果罐里有 m i m_i mi 个糖果。John 决定吃掉一些糖果,他想吃掉至少 a a a 个糖果,但不超过 b b b 个。问题是 John 无法确定吃多少个糖果和每种糖果各吃几个。有多少种方法可以做这件事呢?
单个列出来是 1 + x + … + x m i = 1 − x m i + 1 1 − x 1+x+\ldots+x^{m_i}=\frac{1-x^{m_i+1}}{1-x} 1+x+…+xmi=1−x1−xmi+1 .
所以总的来说是 ( 1 − x m 1 + 1 ) ⋯ ( 1 − x m n + 1 ) ( 1 − x ) n = 1 ( 1 − x ) n F ( x ) \frac{(1-x^{m_1+1})\cdots(1-x^{m_n+1})}{(1-x)^n}=\frac{1}{(1-x)^n}F(x) (1−x)n(1−xm1+1)⋯(1−xmn+1)=(1−x)n1F(x) .
upd 11.25 这题难在处理模数…
关于 a a a 和 b b b 的限制转化成 x m x^m xm 的前缀模数一起处理.
考虑
F
(
x
)
F(x)
F(x) 中的
a
x
b
ax^b
axb 对答案的贡献:
a
∑
i
=
0
l
m
t
−
b
(
i
+
n
−
1
n
−
1
)
=
a
(
l
m
t
+
n
−
b
n
)
a\sum\limits_{i=0}^{lmt-b}\binom{i+n-1}{n-1}=a\binom{lmt + n - b}{n}
ai=0∑lmt−b(n−1i+n−1)=a(nlmt+n−b) .
于是剩下怎么处理这个模数.
展开写成 ( n + l m t − b ) ( n + l m t − b − 1 ) ⋯ n ! \frac{(n+lmt-b)(n+lmt-b-1)\cdots}{n!} n!(n+lmt−b)(n+lmt−b−1)⋯ .
上下分开处理.
对于上面,注意到总共只有 n n n 个,记为 x x x .
我们最终写成 x = 2004 × n ! × k 2 + r , x n ! ≡ a n s ( m o d 2004 ) x=2004\times n!\times k_2+r\ , \ \frac{x}{n!}\equiv ans(\mod2004) x=2004×n!×k2+r , n!x≡ans(mod2004) , k 2 k_2 k2 为整数.
则:
x n ! = a n s + 2004 × k 1 \frac{x}{n!}=ans+2004\times k_1 n!x=ans+2004×k1 .
2004 × n ! × k 2 + r = a n s × n ! + 2004 × k 1 × n ! 2004\times n!\times k_2+r=ans\times n!+2004\times k_1\times n! 2004×n!×k2+r=ans×n!+2004×k1×n! .
移项:
r = n ! × ( a n s + 2004 × k 1 − 2004 × k 2 ) r=n!\times (ans+2004\times k_1-2004\times k_2) r=n!×(ans+2004×k1−2004×k2) .
r n ! = k ′ + a n s \frac{r}{n!}=k'+ans n!r=k′+ans .
即 r n ! ≡ a n s ( m o d 2004 ) \frac{r}{n!}\equiv ans(\mod 2004) n!r≡ans(mod2004) .
EGF
显然我们 OGF \text{OGF} OGF 主要是拿来解决组合问题的,那如果有序的话又怎么做呢.
我们引入指数生成函数(EGF),定义数列 { h n } \{h_n\} {hn} 的指数生成函数为 G ^ ( x ) = \hat{G}(x)= G^(x)= ∑ k = 0 ∞ h k x k k ! \sum\limits_{k=0}^\infty h_k\frac{x^k}{k!} k=0∑∞hkk!xk .
常用的形式有:
- e x = 1 + x + x 2 2 ! + ⋯ = ∑ k = 0 ∞ x k k ! e^x=1+x+\frac{x^2}{2!}+\cdots=\sum\limits_{k=0}^\infty \frac{x^k}{k!} ex=1+x+2!x2+⋯=k=0∑∞k!xk .
- e a x = 1 + a x + ( a x ) 2 2 ! + ⋯ = ∑ k = 0 ∞ a k x k k ! e^{ax}=1+ax+\frac{(ax)^2}{2!}+\cdots=\sum\limits_{k=0}^\infty a^k\frac{x^k}{k!} eax=1+ax+2!(ax)2+⋯=k=0∑∞akk!xk .
- e x + e − x 2 = 1 + x 2 2 ! + x 4 4 ! + ⋯ = ∑ k = 0 ∞ x 2 k ( 2 k ) ! \frac{e^x+e^{-x}}{2}=1+\frac{x^2}{2!}+\frac{x^4}{4!}+\cdots=\sum\limits_{k=0}^\infty \frac{x^{2k}}{(2k)!} 2ex+e−x=1+2!x2+4!x4+⋯=k=0∑∞(2k)!x2k .
- e x − e − x 2 = x + x 3 3 ! + x 5 5 ! + ⋯ = ∑ k = 0 ∞ x 2 k + 1 ( 2 k + 1 ) ! \frac{e^x-e^{-x}}{2}=x+\frac{x^3}{3!}+\frac{x^5}{5!}+\cdots=\sum\limits_{k=0}^\infty \frac{x^{2k+1}}{(2k+1)!} 2ex−e−x=x+3!x3+5!x5+⋯=k=0∑∞(2k+1)!x2k+1 .
- ln ( x + 1 ) = x − x 2 2 + x 3 3 ! − ⋯ = ∑ k = 1 ∞ ( − 1 ) k + 1 x k k \ln(x+1) = x-\frac{x^2}{2}+\frac{x^3}{3!}-\cdots=\sum\limits_{k=1}^\infty (-1)^{k+1}\frac{x^k}{k} ln(x+1)=x−2x2+3!x3−⋯=k=1∑∞(−1)k+1kxk .
- sin x = x − x 3 3 ! + x 5 5 ! − ⋯ = ∑ k = 0 ∞ ( − 1 ) 2 k + 1 x 2 k + 1 ( 2 k + 1 ) ! \sin x=x-\frac{x^3}{3!}+\frac{x^5}{5!}-\cdots=\sum\limits_{k=0}^\infty (-1)^{2k+1}\frac{x^{2k+1}}{(2k+1)!} sinx=x−3!x3+5!x5−⋯=k=0∑∞(−1)2k+1(2k+1)!x2k+1 .
- cos x = 1 − x 2 2 ! + x 4 4 ! − ⋯ = ∑ k = 0 ∞ ( − 1 ) 2 k x 2 k ( 2 k ) ! \cos x= 1-\frac{x^2}{2!}+\frac{x^4}{4!}-\cdots=\sum\limits_{k=0}^\infty (-1)^{2k}\frac{x^{2k}}{(2k)!} cosx=1−2!x2+4!x4−⋯=k=0∑∞(−1)2k(2k)!x2k .
- arcsin x = x + 1 2 × x 3 3 + 1 × 3 2 × 4 × x 5 5 + 1 × 3 × 5 2 × 4 × 6 × x 7 7 + ⋯ \arcsin x = x + \frac{1}{2}\times \frac{x^3}{3}+\frac{1\times 3}{2\times 4}\times \frac{x^5}{5}+\frac{1\times 3\times 5}{2\times 4\times 6}\times \frac{x^7}{7}+\cdots arcsinx=x+21×3x3+2×41×3×5x5+2×4×61×3×5×7x7+⋯ .
这玩意相乘的话可以保证局部组合,整体排列,具体给出以下例子.
很 simple \text{simple} simple 的例子
一
求 h k = P n k h_k=P_n^k hk=Pnk 的指数生成函数.
直接列出来:
∑ k = 0 n h k x k k ! = ∑ k = 0 n n ! ( n − k ! ) k ! x k = ∑ k = 0 n ( n n − k ) x k = ( 1 + x ) n \sum\limits_{k=0}^nh_k\frac{x^k}{k!}=\sum\limits_{k=0}^n\frac{n!}{(n-k!)k!}x^k=\sum\limits_{k=0}^n\binom{n}{n-k}x^k=(1+x)^n k=0∑nhkk!xk=k=0∑n(n−k!)k!n!xk=k=0∑n(n−kn)xk=(1+x)n .
二
求多重集合 { n 1 ⋅ a 1 , n 2 ⋅ a 2 , … , n k ⋅ a k } \{n_1·a_1\ , \ n_2·a_2\ , \ \ldots\ , n_k·a_k\} {n1⋅a1 , n2⋅a2 , … ,nk⋅ak} 的 n n n 排列数 S n S_n Sn ,其中 n = n 1 + n 2 + … + n k n=n_1+n_2+\ldots+n_k n=n1+n2+…+nk .
由组合数学我们可知 S n = n ! n 1 ! n 2 ! ⋯ n k ! S_n=\frac{n!}{n_1!n_2!\cdots n_k!} Sn=n1!n2!⋯nk!n! .
设 f ^ n 1 ( x ) = ∑ k = 0 n 1 x k k ! \hat{f}_{n_1}(x)=\sum\limits_{k=0}^{n_1}\frac{x^k}{k!} f^n1(x)=k=0∑n1k!xk .
记 G ^ ( x ) = ∏ i = 1 k f ^ n i ( x ) \hat{G}(x)=\prod\limits_{i=1}^k \hat{f}_{n_i}(x) G^(x)=i=1∏kf^ni(x) .
于是我们知道 x m x^m xm 项的系数是:
∑ m ! m 1 ! m 2 ! … m k ! \sum\frac{m!}{m_1!m_2!\ldots m_k!} ∑m1!m2!…mk!m! .
其中 0 ≤ m 1 ≤ n 1 , 0 ≤ m 2 ≤ n 2 , … , 0 ≤ m k ≤ n k 0\le m_1\le n_1\ , \ 0\le m_2\le n_2\ , \ \ldots\ , \ 0\le m_k\le n_k 0≤m1≤n1 , 0≤m2≤n2 , … , 0≤mk≤nk 且 m 1 + m 2 + ⋯ + m k = m m_1+m_2+\cdots+m_k=m m1+m2+⋯+mk=m .
注意到 n n n 只有由唯一一组 ( n 1 , n 2 , … , n k ) (n_1\ , \ n_2\ , \ \ldots \ , \ n_k) (n1 , n2 , … , nk) 可以得到.
所以 x n x^n xn 的系数就是我们要求的值.
提高一点的应用
Poj3734 Blocks
用红黄蓝绿四种颜色染 n n n 个格子,要求红色和绿色必须是偶数个,求方案数,对 10007 10007 10007 取模.
直接写出指数生成函数 G ^ ( x ) = ( e x + e − x 2 ) 2 e 2 x = e 4 x + 2 e 2 x + 1 4 = 1 4 + 1 4 ∑ k = 0 ∞ ( 4 k + 2 × 2 k ) x k k ! \hat{G}(x)=(\frac{e^x+e^{-x}}{2})^2e^{2x}=\frac{e^{4x}+2e^{2x}+1}{4}=\frac{1}{4}+\frac{1}{4}\sum\limits_{k=0}^{\infty}(4^{k}+2\times 2^k)\frac{x^k}{k!} G^(x)=(2ex+e−x)2e2x=4e4x+2e2x+1=41+41k=0∑∞(4k+2×2k)k!xk .
答案就是 4 n + 2 n + 1 4 \frac{4^n+2^{n+1}}{4} 44n+2n+1 .