前置芝士
广义二项式定理
广义二项式系数 \(\binom{\alpha}{k}=\frac{\alpha(\alpha-1)\dots(\alpha-k+1)}{k!},\alpha\in\mathbb{R},k\in\mathbb{N}\)。
广义二项式定理 \((x+y)^{\alpha}=\sum\limits_{k=0}^{\infty}\binom{\alpha}{k}x^{\alpha-k}y^{k}\)。
上指标翻转
\[\begin{aligned}
& \binom{n}{m}=(-1)^{m}\binom{m-n-1}{m}
\end{aligned}
\]
泰勒展开
\[\begin{aligned}
& \frac{1}{1-x}=\sum_{k=0}^{\infty}x^{k}\\
& e^{x}=\sum_{n=0}^{\infty}\frac{1}{n!}x^{n}
\end{aligned}
\]
下面的公式其实都可以用上面的公式推出来。
\[\begin{aligned}
& \frac{1}{(1-x)^2}=\sum_{k=0}^{\infty}(k+1)x^{k}\\
& \frac{1}{(1-x)^{3}}=\sum_{k=0}^{\infty}\frac{(k+2)(k+1)}{2}x^{k}\\
& \frac{1}{1+x}=\sum_{k=0}^{\infty}(-1)^{k}x^{k}\\
& xe^{x}=\sum_{n=0}^{\infty}\frac{1}{(n-1)!}x^{n}=\sum_{n=0}^{\infty}\frac{n}{n!}x^{n}\\
& e^{Cx}=\sum_{n=0}^{\infty}\frac{1}{n!}(Cx)^{n}=\sum_{n=0}^{\infty}\frac{C^{n}}{n!}x^{n}\\
\end{aligned}
\]
最后还有一个奇怪的式子。
\[\begin{aligned}
& \ln(1-x)=-\sum_{n\ge 1}\frac{1}{n}x^{n}
\end{aligned}
\]
生成函数 GF
基本思想
生成函数用于解决计数问题。生成函数的思想是组合意义符号化,简单来说就是把一个决策换成一个多项式,用多项式的乘法来代替不同决策的组合,最后得到原题的通项公式。
普通型生成函数 OGF
普通生成函数形如 $$\sum_{i\ge 0}A_{i}x^{i}$$ 通常用于无标号计数。
例一
举个例子方便理解:现在 XZY 有一家奶茶店。由于快过年了,XZY 要赶快关门,此时 ben 来买奶茶。XZY 还有三种配料,分别有 \(3\) 份、\(2\) 份、\(3\) 份。ben 将会任意挑选 \(4\) 份配料,求有多少种不同的配料组合。
我们将选择配料的决策转化为多项式,那么三种配料的选择分别对应 \(1+x+x^{2}+x^{3},1+x+x^{2},1+x+x^{2}+x^{3}\)。其中每一项 \(x\) 的指数就表示这一种配料我选的个数,而多项式乘法就恰好枚举出了每一种选择方案,那么做完多项式乘法之后 \(x\) 指数是 \(4\) 的那一项的系数就是我们的答案,这不难理解。
\[\begin{aligned}
& (1+x+x^{2}+x^{3})^{2}(1+x+x^{2})\\
& =1+3x+6x^{2}+9x^{3}+10x^{4}+9x^{5}+6x^{6}+3x^{7}+x^{8}\\
\end{aligned}
\]
那么我们选 \(0\) 到 \(8\) 份配料的答案就都得到了,分别是 \(1,3,6,9,10,9,6,3,1\)。本题的答案就是 \(10\)。
例二
接下来我们拓展到更全面的问题:食物。
我们考虑用生成函数表示出每一个物品然后乘起来,他们分别是
\[\begin{aligned}
& \sum_{k=0}^{\infty}x^{2k}=\sum_{k=0}^{\infty}(x^{2})^{k}=\frac{1}{1-x^2}\\
& 1+x\\
& 1+x+x^{2}\\
& \sum_{k=0}^{\infty}x^{2k+1}=x\sum_{k=0}^{\infty}x^{2k}=\frac{x}{1-x^2}\\
& \sum_{k=0}^{\infty}x^{4k}=\frac{1}{1-x^4}\\
& 1+x+x^{2}+x^{3}\\
& 1+x\\
& \sum_{k=0}^{\infty}x^{3k}=\frac{1}{1-x^3}\\
\end{aligned}
\]
乘起来得到
\[\begin{aligned}
& \frac{1}{1-x^2}(1+x)(1+x+x^{2})\frac{x}{1-x^2}\frac{1}{1-x^4}(1+x+x^{2}+x^{3})(1+x)\frac{1}{1-x^3}\\
& =\frac{x}{(1-x)^4}\\
\end{aligned}
\]
接下来把这个式子展开
\[\begin{aligned}
& \frac{x}{(1-x)^4}\\
& =x(1-x)^{-4}\\
& =x\sum_{k=0}^{\infty}\binom{-4}{k}(-x)^{k}1^{-4-k}\\
& =x\sum_{k=0}^{\infty}(-1)^{k}\binom{k+3}{k}(-1)^{k}x^{k}\\
& =\sum_{k=0}^{\infty}\binom{k+2}{3}x^{k}\\
& =\sum_{k=0}^{\infty}\frac{k(k+1)(k+2)}{3!}x^{k}\\
\end{aligned}
\]
故答案为 \(\frac{k(k+1)(k+2)}{6}\)。
指数型生成函数 EGF
指数型生成函数形似 $$\sum_{i\ge 0}A_{i}\frac{x^{i}}{i!}$$ 通常用于有标号计数。
这么定义是为了方便运算,因为对于有标号计数若我们此时有两个对象 \(F,G\),合并则会有式子
\[\begin{aligned}
\text{记}n=i+j\\
& H(n)=\binom{n}{i}F(i)\times G(j)\\
& \frac{H(n)}{(n)!}=\frac{F(i)}{i!}\times\frac{G(j)}{j!}
\end{aligned}
\]
如此定义后,我们就不需要考虑运算时系数的影响。
并且我们发现将 \(x_i\) 除以 \(i!\) 相当于从 \(x_i\) 中拿出一个 \(i!\) 然后乘给 \(A_i\),也就是算上了全排(有标号)的贡献。
例一
ben 正打算决定好选择的奶茶配料时,突然想起奶茶的配料加入的顺序不同,做出的奶茶也是不一样的。同上,现在分别有 \(3,2,3\) 份配料,取 \(4\) 份,求能配出多少种不同的奶茶。
我们同样写出其生成函数,把它们乘起来
\[\begin{aligned}
& =(1+x+\frac{x^2}{2!}+\frac{x^3}{3!})^2(1+x+\frac{x^2}{2!})\\
& =1+3x+\frac{9x^{2}}{2!}+\frac{26x^{3}}{3!}+\frac{70x^4}{4!}+\frac{170x^5}{5!}+\frac{350x^6}{6!}+\frac{560x^7}{7!}+\frac{560x^8}{8!}\\
\end{aligned}
\]
则答案为 \(70\)。
例二
同样的,我们拓展到更加全面的问题:P2012 拯救世界2。
\[\begin{aligned}
& e^{4x}(\frac{e^{x}-e^{-x}}{2})^{4}(\frac{e^{x}+e^{-x}}{2})^{4}\\
& =(\frac{e^{2x}-1}{2})^{4}(\frac{e^{x}+e^{-x}}{2})^{4}\\
& =(\frac{e^{3x}-e^{-x}}{4})^{4}\\
& =\frac{e^{12x}-4e^{8x}+6e^{4x}-4+e^{-4x}}{256}\\
& =-\frac{1}{64}+\sum_{k=0}^{\infty}\frac{12^{k}-4\times 8^{k}+6\times 4^{k}+(-4)^{k}}{256}\frac{x^{k}}{k!}
\end{aligned}
\]
答案即为 \(\frac{12^{k}-4\times 8^{k}+6\times 4^{k}+(-4)^{k}}{256}\),但是本题 \(n\) 比较大,并且模数不是质数,我们需要用光速幂优化求值,将底数统一。
\[\begin{aligned}
& \frac{12^{k}-4\times 8^{k}+6\times 4^{k}+(-4)^{k}}{256}\\
& =\frac{3^{k}\times 2^{2k}-2^{3k+2}+3\times 2^{2k+1}+(-1)^{k}2^{2k}}{2^{8}}\\
& =3^{k}\times 2^{2k-8}-2^{3k-6}+3\times 2^{2k-7}+(-1)^{k}2^{2k-8}
\end{aligned}
\]