多项式x组合数学x线性代数 总结

多项式 \(\times\) 组合数学 \(\times\) 线性代数

​ 这是一篇总结......

Part 1 多项式

​ OI中的多项式常见的就是推卷积式子和生成函数,一般很少出现直接给式子的题目,与组合数学的联系相对比较紧密

[HEOI2016/TJOI2016] 求和

计算\(f(n)=\sum\limits_{i=0}^n\sum\limits_{j=0}^i \begin{Bmatrix}i\\j\end{Bmatrix} \times 2^j \times j!\),其中\(\begin{Bmatrix}i\\j\end{Bmatrix}\)为第二类斯特林数


考虑到\(i<j\)\(S(i,j)=0\)

推式子:

\[\begin{array} _f(n) &= \sum\limits_{i=0}^n\sum\limits_{j=0}^n \begin{Bmatrix}i\\j\end{Bmatrix} \times 2^j \times j! \\ &= \sum\limits_{j=0}^n 2^j j! \sum\limits_{i=0}^n \begin{Bmatrix}i\\j\end{Bmatrix} \\ &= \sum\limits_{j=0}^n 2^j j! \sum\limits_{i=0}^n \frac{1}{j!} \sum\limits_{k=0}^j (-1)^k \binom{j}{k} (j-k)^i \\ &= \sum\limits_{j=0}^n 2^j j! \sum\limits_{i=0}^n \sum\limits_{k=0}^j \frac{(-1)^k}{k!} \frac{(j-k)^i}{(j-k)!} \\ &= \sum\limits_{j=0}^n 2^j j! \sum\limits_{k=0}^j \frac{(-1)^k}{k!} \frac{\sum\limits_{i=0}^n(j-k)^i}{(j-k)!} \end{array} \]

\(\sum\limits_{i=0}^n (j-k)^i\)可以预处理计算,里面的东西可以NTT求出,于是便可以\(O(nlogn)\)求出答案

CF755G PolandBall and Many Other Balls

给出一排\(n\)个球,定义一组只可以包括一个球或两个相邻球,一个球只能分到一个组中,求取出\(k\)组的方案数


先考虑一个朴素的DP,记\(f_{i,j}\)表示\(i\)个球放\(j\)组的方案数,于是我们有:

\[f_{i,j}=f_{i-1,j}+f_{i-1,j-1}+f_{i-2,j-1} \]

表示可以不选,也可以单独一组,也可以和前一个球共同组成一组

\(F_i\)表示\(f_i\)的生成函数,于是,我们有:

\[F_i=F_{i-1}+xF_{i-1}+xF_{i-2} \]

得到\(F_i-(x+1)F_{i-1}-xF_{i-2}=0\),发现这是个简单的递推,设特征方程:

\[\lambda^2-(x+1)\lambda-x=0 \]

解得:\(\lambda_1=\frac{(x+1)+\sqrt{x^2+6x+1}}{2}\)\(\lambda_2=\frac{(x+1)-\sqrt{x^2+6x+1}}{2}\),即\(F_i=c_1\lambda_1^i+c_2\lambda_2^i\),代入\(F_0,F_1\)

\[\begin{cases} c_1+c_2=1 \\ c_1\lambda_1+c_2\lambda_2=x+1 \end{cases} \]

解得:\(\begin{cases}c_1=\frac{(x+1)+\sqrt{x^2+6x+1}}{2\sqrt{x^2+6x+1}}\\c_2=\frac{-(x+1)+\sqrt{x^2+6x+1}}{2\sqrt{x^2+6x+1}}\end{cases}\)

所以\(F_n=\frac{1}{\sqrt{x^2+6x+1}}(\frac{(x+1)+\sqrt{x^2+6x+1}}{2})^{n+1}+\frac{-(x+1)+\sqrt{x^2+6x+1}}{2\sqrt{x^2+6x+1}}(\frac{(x+1)-\sqrt{x^2+6x+1}}{2})^n\)

发现后面的式子\(\mod x^{n+1}\)等于0,也就是说完全用不上,所以只要算第一个式子

多项式全家桶就行

[CTSC2006]歌唱王国

字符集大小为\(n\),有一个长为\(m\)的字符串\(S\),在空串\(T\)后随机加一个字符,当\(S\)\(T\)的连续字串后停止,问\(T\)的期望长度


给出概率生成函数PGF的定义,如果对于某个离散型随机变量\(x\),存在\(\{a_n\}\)满足\(P(x=i)=a_i\),记\(\{a_n\}\)的概率生成函数为\(F_i=\sum\limits\limits_{i=0}^{+\infty}a_ix^i\)

概率生成函数有以下性质:

  • \(F(1)=\sum\limits_{i=0}^{+\infty}a_i=1\)

  • \(E(x)=\sum\limits_{i=0}^{+\infty}ia_i=\sum\limits_{i=0}^{+\infty}[x_i]F(1)'\)

  • \[\begin{array} _D(x) &=E[(x-E(x))^2] \\ &=E(x^2)-E(x)^2 \\ &=\sum\limits_{i=0}^{+\infty}[i(i-1)+i]a_i-[\sum\limits_{i=0}^{+\infty}[x_i]F(x)']^2 \\ &=\sum\limits_{i=0}^{+\infty}[x^i][F(x)''+F(x)'-(F(x)')^2 \end{array} \]

设长度为\(i\)时结束的概率为\(f_i\),未结束的概率为\(g_i\)

我们可以得出以下两个式子:

\[\begin{cases} g_{i-1}=f_i+g_i \\ g_i \times (\frac{1}{n})^m=\sum\limits_{j=1}^m border_j \times f_{i+j} \times \frac{1}{n}^{m-j} \end{cases} \]

第一个表示\(i-1\)时未结束的概率是\(i\)时结束/未结束的概率之和

第二个表示\(i\)时未结束,在\(T\)后面加一个名字,其中有可能在加第\(j\)个字符时就结束了,而此时加的\(j\)个字符一定满足\(S[1 \cdots j]=S[n-j+1 \cdots n]\),也就是说\(S\)的前\(j\)个字符是\(S\)的一个border

\(f\)的生成函数为\(F\)\(g\)的生成函数为\(G\)

所以:

\[\begin{cases} xG+1=F+G \\ G \times \frac{1}{n}^m=\sum\limits_{i=1}^m border_i \times F \times (\frac{1}{n}x)^{m-j} \end{cases} \]

我们要求的就是\(E(x)=\sum\limits_{i=0}^{+\infty}[x_i]F(1)'\)

对第一个式子求导,把\(x=1\)代入,得

\[\begin{cases} F(1)'=G(1) \\ G(1)=\sum\limits_{i=1}^m border_i \times F(1) \times (\frac{1}{n})^{m-j} \end{cases} \]

又有\(F(1)=1\),故可以累加得到答案

Part 2 组合数学

​ 注意一些常见套路和一些式子的组合意义,一些常用的组合恒等式需要能熟练应用

[FJOI2016]建筑师

\(n\)个建筑,高分别为\(1\)~\(n\),给出从左右看分别能看到的建筑个数\(A,B\),求方案数


肯定,高为\(n\)的建筑一定会被看见,考虑其它\(n-1\)个建筑会被分成\(A+B-2\)个部分,每一部分中最高的建筑的位置已经确定了,于是每一个部分就相当于一个起始段固定的圆排列,再考虑哪些部分放左边,答案就为\(\dbinom{A+B-2}{A-1}\begin{bmatrix}n-1\\A+B-2\end{bmatrix}\)

[CTSC2017] 吉夫特

给定一个长为\(n\)的序列\(a_1,\cdots,a_n\),问有多少个长度大于等于2的不上升子序列\(b_i\)满足

\[\prod\limits_{i=1}^{n}\dbinom{a_{b_i-1}}{a_{b_i}}\mod 2>0 \]


看到组合数和\(\mod 2\),卢卡斯公式便是一个十分自然且优秀的想法

\[\dbinom{n}{m}=\dbinom{n/2}{m/2} \times \dbinom{n \mod 2}{m \mod 2} \]

实质上就是把\(n\)\(m\)二进制分解

考虑到\(\dbinom{1}{0}=1\)\(\dbinom{1}{1}=1\)\(\dbinom{0}{0}=1\)\(\dbinom{0}{1}=0\)

上式大于0当且仅当\(n\)某一二进制位为0时\(m\)也为\(0\),即\(m\)\(n\)的子集

于是记\(f_i\)表示以\(i\)结尾的满足条件的子序列的方案数,枚举子集转移即可

[PKUWC2018] 随机游走

给出一颗\(n\)个结点的树,从\(x\)出发,每次等概率选择相邻的一条边走去,给出\(m\)次询问,给出一个集合\(S\),求\(S\)中所有点至少经过一次的期望步数


至少经过一次很不好求,考虑用Min-Max容斥转换成第一次经过

\(f_{u,s}\)表示当前在\(u\),第一次经过\(s\)中的点的期望步数,有:

\[f_{u,s}=\frac{1}{d_u}(\sum\limits_{v \in son}f_{v,s}+f_{fa,s})+1 \]

暴力解需要高斯消元,复杂度显然难以接受,考虑到这是一棵树,尝试分离儿子和父亲的贡献,把\(f_i,s\)写成关于\(f_{fa,s}\)的函数

\(f_{i,s}=A_if_{fa,s}+B_i\),重写方程:

\[f_{i,s}=\frac{1}{du}(\sum\limits_{v \in son}(A_vf_{i,s}+B_v)+f_{fa,s})+1 \]

移项整理得:

\[f_{i,s}=\frac{d_u}{(d_u-sum_A)}f_{fa,s}+\frac{d_u+sum_B}{(d_u-sum_A)} \]

这样便可一次树形DP求出\(f_{x,s}\)

\(F_{x,s}\)为从\(x\)出发,至少经过\(s\)一次的期望步数,则

\[F_{x,S}=\sum\limits_{T \subseteq S}(-1)^{|T|-1}f_{x,T} \]

不需要每次询问都计算一次,可以用FWT预处理子集和优化

Part 3 线性代数

​ 线性代数在OI中有很多应用,从广为人知的矩阵快速幂,线性基,高斯消元,到Matrix-Tree定理,到LGV引理

LGV引理

在一个有向无环图中,边有边权,出发点\(A:\{a_1,\cdots,a_n\}\),目标点\(B:\{b_1,\cdots,b_n\}\)\(a\)\(b\)的一条路径记作\(P:a \rightarrow b\),记\(w(u,v)=\sum\limits_{P:a \rightarrow b}\prod\limits_{e \in P}w_e\)

\(G=\begin{pmatrix}w(a_1,b_1)&\cdots&w(a_1,b_n)\\\vdots&\ddots&\vdots\\w(a_n,b_1)&\cdots&w(a_n,b_n)\end{pmatrix}\),有:\(|G|=\sum\limits_{(P_1,\cdots,P_n):A \rightarrow B} sign(\sigma(P))\prod\limits_{i=1}^n\prod\limits_{e \in P_i} w_e\)

\(|G|\)是所有\(A\)\(B\)的不相交路径\(P:(P_1,\cdots,P_n)\)的带符号和

倘若把边权设为1,得到的就是不相交路径的方案数

[模板]LGV引理

给出一个\(n \times n\)的棋盘,只能向上或向右走,给出\(m\)个起点和终点,分别为\((a_i,1),\cdots,(a_m,1)\)\((b_1,n),\cdots,(b_m,n)\),求不相交路径方案数


容易看出从\((a,1)\)走到\((b,n)\)的方案数为\(\dbinom{b-a+n-1}{n-1}\),构造矩阵求出行列式即可

Unknown

给出一个图,每个边有黑白两种颜色,求恰好有\(k\)条白边的生成树个数


我们把白边的边权看作\(x\),黑边的边权看作\(1\),这样,方案数就是一个关于\(x\)\(n\)次多项式,我们要求的也就是\(x^k\)的系数

\(x\)分别带入\(0,1,\cdots,k\),多点插值即可

posted @ 2020-10-11 19:47  zjy123456  阅读(455)  评论(0编辑  收藏  举报