计数好帮手 生成函数

OGF

记数列 { a i } \{a_i\} {ai} 的生成函数为 ∑ k = 0 ∞ a k x k \sum\limits_{k=0}^{\infty} a_kx^k k=0akxk .

常用的生成函数有

  1. 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 1x1=1+x+x2+=k=0xk .
  2. 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} 1xn1=1+xn+x2n+=k=0xkn .
  3. 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 1ax1=1+ax+a2x2+=k=0akxk .
  4. 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 (1x)n1=k=0(k1n+k1)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 (1x)n=k=0(kn+k1)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+k1)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=(n1n+m1)=(mn+m1) .

用生成函数即写成 1 ( 1 − x ) m \frac{1}{(1-x)^m} (1x)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} 1x21×1x2x×1x1x5×1xx ,第 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=0akxk ,特别的记 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} (18x)G(x)=k=110k1xk+1=xk=010kxk+1=110xx+1=110x19x .

进而得到:

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)=(110x)(18x)19x=21(110x1+18x1) .

所以 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} 1x21×1x1x2×1x1x3×1x2x×1x41×1x1x4×1x1x2×1x31 .

整理一下得到:

x ( 1 − x ) 4 \frac{x}{(1-x)^4} (1x)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=1x1xmi+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) (1x)n(1xm1+1)(1xmn+1)=(1x)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=0lmtb(n1i+n1)=a(nlmt+nb) .

于是剩下怎么处理这个模数.

展开写成 ( n + l m t − b ) ( n + l m t − b − 1 ) ⋯ n ! \frac{(n+lmt-b)(n+lmt-b-1)\cdots}{n!} n!(n+lmtb)(n+lmtb1) .

上下分开处理.

对于上面,注意到总共只有 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!xans(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×k12004×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!rans(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=0hkk!xk .

常用的形式有:

  1. 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=0k!xk .
  2. 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=0akk!xk .
  3. 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+ex=1+2!x2+4!x4+=k=0(2k)!x2k .
  4. 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)!} 2exex=x+3!x3+5!x5+=k=0(2k+1)!x2k+1 .
  5. 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)=x2x2+3!x3=k=1(1)k+1kxk .
  6. 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=x3!x3+5!x5=k=0(1)2k+1(2k+1)!x2k+1 .
  7. 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=12!x2+4!x4=k=0(1)2k(2k)!x2k .
  8. 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=0nhkk!xk=k=0n(nk!)k!n!xk=k=0n(nkn)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\} {n1a1 , n2a2 ,  ,nkak} 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=0n1k!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=1kf^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 0m1n1 , 0m2n2 ,  , 0mknk 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+ex)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 .

[集训队作业2013]城市规划
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值