网课-组合数学学习笔记2

基础

插板法

\(n\) 个无标号物品分成 \(m\) 个有标号组。

  • 非空:

    \[\dbinom{n-1}{m-1} \]

  • 有空:

    \[\dbinom{n+m-1}{m-1} \]

    构造 一一对应的转化

    现有两个集合 \(A,B\)。如果所有 \(A\) 中的元素都能够映射到 \(B\) 中,则 \(|A| \le |B|\);反之,如果 \(B\) 能映射到 \(A\),则 \(|B| \le |A|\)。二者同时成立,则 \(|A| = |B|\)

  • 组大小有上界:

    考虑容斥。(二项式反演型容斥。)

    image

    容易将赢的场次转化为连续段内点。然后就容易通过上面的方法得到 \(\le K\) 的解法。最后用 \(\le K\) 减去 \(\le K-1\) 即可。


Catalan 数

\[\text{Catalan}(n) = \dbinom{2n}{n} - \dbinom{2n}{n-1} \]

wrpwrp 给出了一个特别妙的证法:

Catalan 数的一种表示方式为,从网格图的 \((0, 0)\) 位置,每次向上 / 向右走,走到 \((n, n)\) 且始终不会碰到直线 \(y = x+1\) 的方案数。

研究不合法的路径:

image

发现所有不合法的路径可唯一映射到一条 \((0, 0) \rightarrow (n-1, n+1)\) 的路径。易得。

这个方法被称为“折线法”。

折线法进阶:

  • P3266 [JLOI2015] 骗我呢

    如果形如 \(f[i][j]\) 的 DP 转移方程比较简单,可以考虑换到网格图上做数路径。


斯特林数

  • 第一类斯特林数

    \(n\) 个不同元素构成 \(m\) 个无标号非空圆排列的方案数。

    \[\begin{bmatrix} n \\ m\end{bmatrix} = \begin{bmatrix} n-1 \\ m-1\end{bmatrix} + (n-1)\begin{bmatrix} n-1 \\ m\end{bmatrix} \]

  • 第二类斯特林数

    \(n\) 个不同元素划分 \(m\) 个无标号非空子集的方案数。

    \[\begin{Bmatrix} n \\ m\end{Bmatrix} = \begin{Bmatrix} n-1 \\ m-1\end{Bmatrix} + m\begin{Bmatrix} n-1 \\ m\end{Bmatrix} \]

  • 普通幂转下降幂

    \[m^n = \sum_{i=0}^m \begin{Bmatrix} \min(n,m) \\ i\end{Bmatrix} m^{\underline{i}} \]

    • 例一:Cards

    • 例二

      image

      一种方法是咔咔咔用斯特林数推式子,可以做到 \(O(k^2)\)

      如果使用 拉格朗日插值,则可以做到 \(O(k)\)

      拉格朗日插值:如果我们有如果我们有一个 \(n\) 次多项式的 \(n + 1\) 个不同的点值 \((xi, yi)\),我们可以通过拉格朗日插值公式还原这个多项式。

      \[f(k) = \sum^n_{i=0} y_i \prod_{i \ne j} \dfrac{k - x_j}{x_i - x_j} \]

      证明:如果默认结论“\(n+1\) 个点值即可确定一个 \(n\) 次多项式”结论成立,那么我们构造的 \(f(k)\) 显然有次数为 \(n\) 且有点值 \((x_i, y_i)\)

      回到这道题,有一个结论:

      \(\sum^n_{i=1} i^k\) 为一个关于 \(n\)\(k+1\) 次多项式。

      证明:使用数学归纳法。假设 \(\sum^{n-1}_{i=1} i^k\) 可表示为一个关于 \(n-1\)\(k+1\) 次多项式 \(T(n-1)\),满足 \(T(x) = \sum_{i=0}^{k+1} a_ix^i\)。那么如果 \(T(n) = \sum^n_{i=1} i^k\) 要成立,则 \(T(n) = T(n-1) + n^k\)\(\sum_{i=0}^{k+1} a_in^i = n^k + \sum_{i=0}^{k+1} a_i(n-1)^i\) 应当有解,而这的确是有解的。

      一个费解的点是:为什么不是关于 \(n\)\(k\) 次多项式?如果是这样,则方程 \(\sum_{i=0}^k a_in^i = n^k + \sum_{i=0}^k a_i(n-1)^i\) 应该有解;而最高项系数,则应有 \(a_i = a_i + 1\),这显然是错误的。

      现在我们只需要求出 \(n = 1,2,\dots,k+2\) 时的点值,代入拉格朗日插值公式即可计算。直接暴力套公式是 \(O(k^2)\) 的,但由于我们代入的 \(x_i\) 是连续的,连乘的结果可以用阶乘表示,于是预处理阶乘后可以做到 \(O(k)\)


杂题



容斥 & 反演

基本容斥

image

\(P_i\) 表示“满足某种性质的元素的集合”。

左侧:具备至少一种性质的元素个数。

右侧(第一个 \(\sum\) 内):至少具备 \(S\) 中所有性质的元素个数。

使用时,我们常常使用其来求解“不具备任何性质的元素个数 = 全部元素 - 具备至少一种性质的元素个数”。

证明见下方“Trick:推容斥系数”。

image

  • P3349 [ZJOI2016] 小星星

    容斥优化 排列计数 问题。

    本题有朴素状压做法设 \(f[i][j][S]\) 表示第 \(i\) 个点的编号为 \(j\),且其子树的编号选法为 \(S\)。有子集枚举复杂度 \(O(n^3 3^n)\)

    注意到我们枚举子集的目的实际是为了避免重复编号。于是可以做容斥,钦定必须在 \(S\) 中选取编号。

    *另外我还有一个想法,我们能不能钦定哪些边不在图中呢?——不好处理边之间的相对位置关系。

  • Trick:推容斥系数

    image

    有什么用?当 \(f_i\)(即容斥系数)不好求时,我们能够将不同的 \(C_0\) 代入,然后高斯消元求解。

    我们先拿它来证明最基本的容斥。考虑每一个元素 \(x \in \bigcup^n_{i=1} P_i\),它对于容斥最终结果的贡献应当为 1。设 \(x\) 一共在 \(k\) 个不同的集合中,\(C_i\) 表示 \(x\)\(i\) 个集合中同时出现的情况,则有:

    \[\sum_{i=1}^k \dbinom{k}{i} f_i \]

    再由二项式定理得:

    \[\sum_{i=0}^k \dbinom{k}{i} (-1)^i = \sum_{i=0}^k \dbinom{k}{i} (-1)^i = (-1+1)^k = [k = 0] \]

    故令 \(f_i = (-1)^{i+1}\),则有:

    \[\sum_{i=1}^k \binom{k}{i} (-1)^{i+1} = -(-1 + \sum_{i=0}^k \binom{k}{i} (-1)^i) = 1 \]

    image

    构造条件 \(C_i\) 表示至少 \(i\) 个数在相同位置上,并代入不同 \(C_0\) 表示恰好 \(m\) 个位置在不同位置上。

    \[\sum_{i=0}^m \dbinom{m}{i} f_i = a_m \]

    这里可以直接 \(O(n^2)\) 递推解出 \(f_i\)


关于反演:

image


二项式反演

image

以第一个式子的证明为例。推导过程难点在一开始设出一个式子:

\[f_n = \sum_{m=0}^n [n-m = 0] \dbinom{n}{m} f_m \]

然后代入这个重要的式子:

\[\sum_{k=0}^n (-1)^k \dbinom{n}{k} = [n = 0] \]

接着咔咔咔推一下就可以了。

考虑上面二项式反演的组合意义。后者拥有更加常用的组合意义,即 \(g_k\) 表示钦定选择 \(k\) 个、其它任选的方案数,\(f_k\) 表示恰好选择 \(k\) 个;前者则用“错排”来解释比较合适,\(g_n\) 表示 \(n\) 个人随便站的方案数,\(f_n\) 表示恰好 \(n\) 个人都站错的方案数。


子集反演

image

其实这两个式子,前者代表 \(F\)\(G\) 高维前缀和,后者代表 \(G\)\(F\) 高维差分。(这可以称为定义式。)

高维差分的计算方式实际与高维前缀和一模一样,是逐位做减法。

这次证明代入的关键式为:

\[\sum_{T \subset S} (-1)^{|T|} = [|S| = 0] \]

其它与二项式反演大同小异。

  • P6442 [COCI2011-2012#6] KOŠARE

    同样,子集反演也可以用于“恰好”与“至多 / 至少”的转换。

  • [ARC101E] Ribbons on Tree

    没太懂。我认为直接称之为容斥 DP 会更合适,考虑一条边加 / 不加入,然后分成若干连通块。过会儿推一下。


min-max 反演

image

  • P3175 [HAOI2015] 按位或

    \(t_i\) 表示第 \(i\) 位变为 \(1\) 的时间,答案等价于 \(E(\max_{i=0}^{n-1} t_i)\)

    使用 min-max 反演。

    \[E(\max_{i=0}^{n-1} t_i) = \sum_{S \in [1,n]} (-1)^{|S|+1} E(\min_{i \in S} t_i) \]

    \(E(\min)\) 是很好求的因为可以贪心。

image


斯特林反演

image

  • 例题一:

    image

    \(f(n, m)\) 表示只限制行不等价的情况下的方案数,则有:\(f(n, m) = (c^m)^{\underline{n}}\)

    \(f(n, m)\) 表示行、列都不等价的情况下的答案,则有:

    \[f(n, m) = \sum^m_{i=1} \begin{Bmatrix} m \\ i \end{Bmatrix} g(n, i) \]

    相当于枚举等价类。

    Tips:以后做组合计数问题,可以先弱化问题,然后找弱化后式子和要求式子的关系。

  • 例题二:P10591 BZOJ4671 异或图

    图上问题经常的套路就是将“连通”给容斥 / 反演掉。

    \(f_i\) 表示恰好有 \(i\) 个联通块的方案,\(g_i\) 表示钦定 \(i\) 个子集的方案(求解方法:将图划分为 \(i\) 个子集,子集内随便连边,子集间不连边)(注意不等同于 \(f_i\) 的后缀和),有如下式子成立:

    \[g_k = \sum^n_{i=k} \begin{Bmatrix} i \\ k \end{Bmatrix} f_i \]

    \[f_1 = \sum^n_{i=1}(−1)^{i−1}(i − 1)!g_i \]

    接下来需要求出 \(g_i\)。这时可以直接枚举子集的划分情况,划分种类数为 贝尔数(即第二类斯特林数的一个前缀和),然后计算连边方案数(使用线性基计算自由元个数)。



生成函数(GF)

多项式定理

多项式 \((x_1 + x_2 + x_3, · · · , x_t)^n\) 的展开式中 \(x_1^{n_1} x_2^{n_2} \cdots x_t^{n_t}\) 的系数
是:

\[\dfrac{n!}{\prod_{i=1}^t n_i!} = \dbinom{n}{n_1, n_2, \dots, n_t} \]

其中 \(\sum n_i = n\)


广义二项式定理

image

image

上指标反转可以在 \(n < 0\) 时用于将上指标化为正形式。


幂级数展开

使用平凡广义二项式定理即可展开的:

image

观察 \(\frac{1}{1-x}\)\(\frac{1}{(1-x)^2}\),猜想:

\[\dfrac{1}{(1-x)^3} = 1 + 3x + 6x^2 + 10x^3 + \cdots \]

在 GF 中,乘上 \(\frac{1}{1-x}\) 等价于做前缀和,乘上 \((1-x)\) 等价于做差分。而乘上形如 \(x, \frac{1}{x}\) 的项则是将下标左右平移。

使用泰勒公式展开的:

image


OGF

image

  • 例一:

    image

    正确性是由于若干括号相乘,等价于每个当中挑一个相乘,将所有方案相加。

  • P10780 BZOJ3028 食物

    就我最菜,连因式分解和完全立方公式都想不到 :(

    \[(a+b)^3 = (a+b)(a^2+b^2-ab) = a^3+3a^2b+3ab^2+b^3 \]


EGF

image

更确切地说,EGF 主要被用于处理若干序列的合并问题。

为什么这么说呢?举例:

\[f_{i+j} = g_i * h_j * \dbinom{i+j}{i} \]

\[\dfrac{1}{(i+j)!}f_{i+j} = \dfrac{1}{i!}g_i * \dfrac{1}{j!}h_j \]

  • 例一:

    image

    仅含偶数项的 EGF:

    \[G(x) = 1 + \dfrac{x^2}{2!} + \dfrac{x^4}{4!} + \cdots = \dfrac{e^x + e^{-x}}{2} \]

  • 例二:

    image


应用

  1. 推导数列通项公式

    例,斐波那契、卡特兰。

  2. 多项式操作

    三个:多项式求逆、多项式 ln、多项式 exp。

    \(O(n \log n)\) 复杂度方法见

    如果遇到不卡 \(O(n^2)\) 的情况,我们可以对其求导后推一个简单的递推式。

  3. 例题

    • 例一:

      image

      生成函数的设计

      实际有几种选择:

      • 以每种长度的骨牌为单位,构建选择几个骨牌的 EGF。

      • 以选了几个骨牌为单位,构建选择每种骨牌的 OGF。

      经过实践选择后者更加简洁。

      注意不能有 \(A_0 = 1\),因为可能会导致前面的项与后面的项有重复方案。

      有答案的生成函数为:

      \[\sum_{i=0}^n A^i(x) = \dfrac{1}{1-A(x)} \]

    • 例二:

      image

      考虑枚举环,将若干棵树拼到环上。

      根据 Prufer 定理,\(n\) 个点有标号无根树的数量为 \(n^{n-2}\);故有 Cayley 定理,\(n\) 个点有标号有根树的数量为 \(n^{n-1}\)。所以有有根树的 EGF 为:\(A(x) = \sum{n \ge 1} \frac{n^{n-1}x^n}{n!}\)

      接着枚举环。注意,这里的环翻转、旋转都会重复,故根据 Burnside 定理,长度为 \(k\) 的环的数量为 \(\frac{k!}{2k}\)。因此答案的 EGF 为:

      \[ans = \dfrac{1}{2} \sum_{k \ge 3} \dfrac{A^k(x)}{k} = -\dfrac{1}{2} \ln(1 - A(x)) - \dfrac{A(x)}{2} - \dfrac{A^2(x)}{4} \]

      (为什么不能直接像下一题,城市规划,那样做?)

    • 例三:P4841 [集训队作业2013] 城市规划

      这道题不同于前两道的一点在于,我们需要自己构造一个生成函数。(类似于反演题目。)

      \(g[n]\) 表示 \(n\) 个点有标号无向连通图数量,\(f[n]\) 表示 \(n\) 个点有标号无向图数量,可以发现有:

      \[F = e^G \]

      于是求 \(F\) 的多项式 \(\ln\) 即可。

posted @ 2024-08-09 08:30  David_Mercury  阅读(16)  评论(0编辑  收藏  举报