Re : 从 [ 数据删除 ] 开始的计数

Re : 从 数据删除 开始的 生成函数 计数 | The Count That Refuses to Start at 0

项目编号: 数据删除

项目等级: Euclid

保密等级 : 本档案仅限持有至少初中数学水平权限的人员查阅。任何试图从0开始阅读本文档的行为将被记录并上报。

警告 阅读本档案所需至少初中知识,并附加上以下内容:

组合计数,一点点高数(极限部分),一点点高中数学(函数、数列)

警告 阅读过程中请时刻注意自己的理智值 Sanity,应大于 1D60

前言

要上一周数学,台下学生悲痛欲绝:

数学o(╥﹏╥)o↓,数学o(╥﹏╥)o↓......

(呃↑,数学是谁...阿巴阿巴...嘻嘻(⊙_⊙)?

千言万语汇成一句:

组合意义天地灭,代数推导保平安

大多数时候从组合意义思考是会很困难的,但是可以生成函数或者其它代数方法硬导,但是导出来的公式自己也不知道组合意义

杂项

建议学习路径

flowchart TD A"前置知识\微积分 + 组合恒等式" A --> B"OGF 常规生成函数" B --> C"EGF 指数生成函数" B --> D"容斥原理" C --> D D --> E"二项式反演" D --> F"Min-Max 容斥" D --> G"格路径 \& 反射容斥" E --> H"Tricks" F --> H G --> H H --> I"实践题" I --> J"OI 实战" A --> 0"公式表" 0 --> J

标签索引

题目标签汇总

题目 标签
ARC110D Binomial Coefficient is Fun 范德蒙德卷积、组合数、生成函数
CF785D Anton and School - 2 组合数
CF1332E Height All the Same 二项式定理、组合数
LOJ6160 二分图染色 容斥、递推、生成函数、二分图
LOJ6244 七选五 容斥、错排
P1450 硬币购物 DP、容斥、背包
P4099 SAO 容斥、树上背包
ABC173F Intervals on Tree 点-边容斥、平面图欧拉公式

按标签频次统计

标签 出现次数
容斥 5(LOJ6160, LOJ6244, P1450, P4099, ABC173F)
组合数 2(ARC110D, CF785D, CF1332E)
生成函数 2(ARC110D, LOJ6160)
递推 1(LOJ6160)
二分图 1(LOJ6160)
错排 1(LOJ6244)
DP / 背包 1(P1450)
树上背包 1(P4099)
点-边容斥 / 平面图欧拉公式 1(ABC173F)
二项式定理 1(CF1332E)

公式表

标号 公式 名称 位置
\(\text{Abs.I}\) \(m\dbinom{n}{m} = n\dbinom{n-1}{m-1}\) 吸收恒等式 基础知识->组合数学
\(\text{Pr.I}\) \(\dbinom{n}{r}\dbinom{r}{k} = \dbinom{n}{k}\dbinom{n-k}{r-k}\) 链式法则 基础知识->组合数学
\(\text{Pas.I}\) \(\dbinom{n}{m} = \dbinom{n-1}{m}+\dbinom{n-1}{m-1}\) 帕斯卡恒等式 基础知识->组合数学
\(\text{Van.C 1}\) \(\sum_{i=0}^{k}\dbinom{n}{i}\dbinom{m}{k-i} = \dbinom{n+m}{k}\) 范德蒙德卷积 基础知识->组合数学
\(\text{Van.C 2}\) \(\sum_{i=0}^{n}\dbinom{i}{s}\dbinom{n-i}{t} = \dbinom{n+1}{s+t+1}\) 范德蒙德卷积(变体)
\(\text{NtB.Thm}\) \((a+b)^n = \sum_{i=0}^{n}\dbinom{n}{i}a^ib^{n-i}\) 牛顿二项式定理 基础知识->组合数学
\(\text{BV.Thm 0}\) \(f(x) = \sum_{i=0}^{n}(-1)^{i}\binom{x}{i}g(i) \iff g(x) = \sum_{i=0}^{n}\binom{x}{i}f(i)\) 二项式反演-基础形式 容斥->二项式反演->基础形式
\(\text{BV.St.Thm 1}\) \(f(x) = \sum_{i=x}^{n} \binom{i}{x} g(i) \iff g(x) = \sum_{i=x}^{n} (-1)^{i-x} \binom{i}{x}f(i)\) 二项式反演-钦定-至少 \(\iff\) 恰好 容斥->二项式反演->钦定意义下
\(\text{BV.St.Thm 2}\) \(f(x) = \sum_{i=0}^{x}\binom{n-x}{n-i}g(i) \iff g(x) = \sum_{i=0}^{x} (-1)^{x-i} \binom{n-i}{n-x}f(i)\) 二项式反演-钦定-至多 \(\iff\) 恰好 容斥->二项式反演->钦定意义下
\(\text{BV.Ch.Thm 1}\) \(f(x) = \sum_{i=x}^{n}\binom{n-x}{n-i}g(i) \iff g(x) = \sum_{i=x}^{n}(-1)^{i-x}\binom{n-x}{n-i}f(i)\) 二项式反演-选择-至少 \(\iff\) 恰好 容斥->二项式反演->选择意义下
\(\text{BV.Ch.Thm 2}\) \(f(x) = \sum_{i=0}^{x}\binom{x}{i}g(i) \iff g(x) = \sum_{i=0}^{x}(-1)^{x-i}\binom{x}{i}f(i)\) 二项式反演-选择-至多 \(\iff\) 恰好 容斥->二项式反演->选择意义下
\(\text{LPE.Fml 0}\) \(\dbinom{x_2+y_2-x_1-y_1}{x_2-x_2}\) 格路径计数基础公式 格路径计数和反射容斥
\(\text{LPE.Fml}\) \(\sum_{k\in Z} \binom{n+m}{n-k(r-l)}\binom{n+m}{n-k(r-l)+r}\) 两个限制的格路径计数 格路径计数和反射容斥->两个限制的格路径计数
\(\text{KmG.}\) \(N_{\text{valid}} = \sum_{\sigma \in G} \text{sgn}(\sigma) \cdot \binom{ (u - a) + (v - b) }{ u - \sigma(a) }\) Karlin-McGregor 公式 格路径计数和反射容斥->反射容斥

基础知识

微积分 | Calculus

好久没用的微积分在这里派上了用场

导数 | Derivative

对于函数 \(f : D \to R\),其在 \(x_0\) 存在导数,当且仅当极限

\\\lim_{\\Delta x \\to 0} \\dfrac{f(x+\\Delta x) - f(x)}{\\Delta x} \\tag{D.Def 1} \\

存在,其导数值为该极限的值

可以记作:

\\\frac{\\text d f}{\\text d x} \\mid_{x=x_0}; \\ f'(x_0); \\ f'(x)\|_{x=x_0} \\

由 \(f(x)\) 在其定义域内的所有点的导数构成的函数就是 \(f(x)\) 的导函数,简称导数,记作 \(\frac{\text d f}{\text d x}\) 或者 \(f'\)

微分 | Differentiation

对于函数 \(f : D \to R\),在 \(U(x_0)\) 有定义。如果函数的增量

\\\Delta y = f(x_0+\\Delta x)-f(x_0) \\

可以表示为

\\\Delta y = A \\cdot \\Delta x + \\omicron(\\Delta x) \\

则称函数在此处可微,并称 \(A\Delta x\) 是函数在 \(x = x_0\) 处的微分,记作 \(\text d y\),或者 \(\text d f(x)\)

容易发现 \(A = f'(x_0)\),所以 \(\text d y |_{x=x_0} = f'(x_0)\text d x\)

所以 \(f'(x_0) = \frac{\text d y}{ \text d x}\)

积分 | Integration

不定积分 | Indefinite Integral

对于函数 \(f : D \to R\),在区间 \(I\) 上有定义,如果函数 \(F(x)\) 在区间 \(I\) 上

\\\dfrac{\\text d F}{\\text dx} = f(x) \\

恒成立,则称 \(F(x)\) 是 \(f(x)\) 的原函数 Antiderivative

而 \(f(x)\) 的积分,定义为所有 \(F(x)\) 的集体,即:

\\\int f(x) \\text d x = F(x) +C \\tag{I.Def 1} \\

\(C\) 是一个与 \(x\) 无关的常数

积分是微分的逆运算


其实定积分很有用,但在这篇博客里确实用不上

组合数学

一些会用到的东西

吸收恒等式 Absorption Identity

\m\\dbinom{n}{m} = n\\dbinom{n-1}{m-1} \\tag{Abs.I} \\

链式法则 Chaining Identity /乘积恒等式 Product Identity

\\\dbinom{n}{r}\\dbinom{r}{k} = \\dbinom{n}{k}\\dbinom{n-k}{r-k} \\tag{Pr.I} \\

帕斯卡恒等式 Pascal's Identity

\\\dbinom{n}{m} = \\dbinom{n-1}{m}+\\dbinom{n-1}{m-1} \\tag{Pas.I} \\

范德蒙德卷积 Vandermonde Convolution

\\\sum_{i=0}\^{k}\\dbinom{n}{i}\\dbinom{m}{k-i} = \\dbinom{n+m}{k} \\tag{Van.C 1} \\

\\\sum_{i=0}\^{n}\\dbinom{i}{s}\\dbinom{n-i}{t} = \\dbinom{n+1}{s+t+1} \\tag{Van.C 2} \\

杂项

\m\^2 = 2\\dbinom{m}{2}+\\dbinom{m}{1} \\

\m\^3 = 6\\dbinom{m}{3}+6\\dbinom{m}{2}+\\dbinom{m}{1} \\

这个可以用来转换

牛顿二项式定理 Newton's Binomial Theorem

\(a+b)\^n = \\sum_{i=0}\^{n}\\dbinom{n}{i}a\^ib\^{n-i} \\tag{NtB.Thm} \\

生成函数 Generating Function

| 常规生成函数

对于无限 数列 \(\{a_n\}\) ,其生成函数为:

\G(x)=\\sum_{n\\ge 0}a_n x\^n \\

记为:

\\\\overset{\\operatorname {OGF}}{\\longrightarrow} G(x) \\

常见数列生成函数

\\<1,1,\\cdots,1,\\cdots\> \\overset{\\operatorname {OGF}}{\\longrightarrow} G(x) = \\frac{1}{1-x} \\

\\<1,a,a\^2,\\cdots,a\^k,\\cdots\>\\overset{\\operatorname {OGF}}{\\longrightarrow} G(x) = \\frac{1}{1-ax} \\

\\<\\dbinom{n}{0},\\ldots,\\dbinom{n}{n},0,\\ldots,0\>\\overset{\\operatorname {OGF}}{\\longrightarrow}(1+x)\^n \\

\\\{\\dbinom{n+i-1}{i-1}\\} \\overset{\\operatorname {OGF}}{\\longrightarrow} \\dfrac{1}{(1-x)\^n} \\

生成函数的平移与伸缩

平移

向右 :乘上 \(x^k\):

\\\begin{equation} \\begin{split} G(x)\&=a_0+a_1x+a_2x\^2+a_3x\^3+\\cdots\\\\ x\^kG(x)\&=a_0x\^k+a_1x\^{k+1}+a_2x\^{k+2}+a_3x\^{k+3}+\\cdots \\end{split} \\end{equation} \\

向左 :乘上 \(x^{-k}\):

\\\begin{equation} \\begin{split} x\^{-k}\\left\[G(x) - \\sum_{i=0}\^{k}a_ix\^i \\right=a_k+a_{k+1}x+a_{k+2}x^2+a_{k+3}x^3+\cdots \end{split} \end{equation} \]

如果加入 \(\vartheta\) 算子(\(\vartheta f = xf'\))

就有神奇的事发生:

\\\vartheta G(x) = xG'(x) = a_1x+2a_2x\^2+3a_3x\^3+\\cdots = \\sum_{i\\ge0}ia_ix\^i \\


伸缩

\G(x\^k) = a_0+a_1x\^k+a_2x\^{2k}+a_3x\^{3k}+\\cdots \\

单位根反演

单位根:满足 \(\omega^k=1\) 的复数 \(\omega\)

\\\left\[k \\mid n\\right = \frac{1}{k}\sum_{i=0}^{k-1}\omega_{k}^{ni} \]

有:

(记 \(\omega = e^{\frac{2\pi i}{k}}\))

\\\begin{equation} \\begin{split} \\sum_{i\\ge0}\[k\|ia_ix^i &= \sum_{i\ge0}\frac1ka_ix^i\sum_{j=0}^{k-1}\omega^{ij}\\ &=\frac1k \sum_{j=0}^{k-1}\sum_{i\ge 0}a_ix^i\omega^{ij}\\ &=\frac1k\sum_{j=0}^{k-1}G(\omega^j x) \end{split} \end{equation} \]

前缀和

对于 \(F(x) = \sum\limits_{n}f_nx^n\)

\\\dfrac{1}{1-x}F(x) = \\sum_{n}(\\sum_{i\\le n}f_i)x\^n \\

卷积

\(F\\cdot G)(x)=\\sum_{n}(\\sum_{a+b=n}f_ag_b)x\^n \\

| 指数生成函数

标准形式

\\\\overset{\\operatorname{EGF}}{\\longrightarrow} \\sum_{n\\ge0}\\frac{a_n}{n!}x\^n \\

常见数列生成函数

\\<1,1,1,\\cdots,1,\\cdots\>\\overset{\\operatorname{EGF}}{\\longrightarrow} e\^x \\

容斥 Inclusion Exclusion Principle

容斥坏的一批的我来学容斥了

基础 Standard

定义 Definition

对于全集 \(U\) 中的元素,有 \(n\) 种不同的属性,第 \(i\) 种属性为 \(P_i\),拥有属性 \(P_i\) 的元素构成集合 \(S_i\),则有:

\\\left\|\\bigcup_{i=1}\^{n}S_i\\right\| = \\sum_{m=1}\^{n}(-1)\^{m-1}\\sum_{a_i\

\\\left\|\\bigcap_{i=1}\^{n} S_{i}\\right\|=\|U\| - \\left\|\\bigcup_{i=1}\^{n}\\overline{S_{i}} \\right\| \\

一般化

对于函数 \(f : A \to R\)、\(g : A \to R\),其中 \(A\) 是集合簇,若

\f(S) = \\sum_{T\\subseteq S}g(T) \\

\g(S) = \\sum_{T \\subseteq S}(-1)\^{\|S\|-\|T\|} f(T) \\

反演 Inversion

容斥也是一种反演

定义 Definition

假设函数 \(f(n)\) 满足:

\f(n) = \\sum_{i=0}\^na_{n,i} g(i) \\

如果存在序列 \(b_{n,n}\) 满足:

\g(n) = \\sum_{i=0}\^{n}b_{n,i}f(i) \\

这就是反演操作,即使用两个序列表示两个函数的相关性

第一反演公式

如果存在 \(n\) 次多项式 \(p,q\) 满足以下公式:

\\[x\^np = \sum_{i=1}^{n}c_{n,i} x\^iq\\ x\^nq = \sum_{i=1}^{n}d_{n,i} x\^ip \]

则对于任意序列,都满足:

\u_n = \\sum_{i=1}\^{n} c_{n,i}v_i \\iff v_n = \\sum_{i=1}\^{n} d_{n,i}u_i \\

由这个定理我们可以知道反演的条件是什么

我们定义 \(\mathbf C\)、\(\mathbf D\) 表示 \(c_{n,i}\)、\(d_{n,i}\) 的下三角矩阵,将 \(p\) 和 \(q\) 写成列向量 \(\mathbf p\) 和 \(\mathbf q\)

所以 \(\mathbf p = \mathbf C \mathbf q\)、\(\mathbf q = \mathbf C \mathbf p\),这个时候:\(\mathbf p = \mathbf C \mathbf D \mathbf p\)

这就说明 \(\mathbf C \mathbf D = \mathbf I\),也就是说 \(\mathbf C\)、\(\mathbf D\) 互为逆矩阵

由于它们是下三角矩阵,所以逆存在的条件是(以 \(\mathbf C\) 举例):

\\\det \\mathbf C = \\prod_{i=1}\^{n} c_{i,i} \\not= 0 \\

也就是 \(c_{i,i}\) 不等于 \(0\)

二项式反演 Binomial Inversion

二项式反演 Binomial Inversion,其作用是将 至少/至多 类问题 和 恰好类问题 进行转化

基础形式 Standard

\f(x) = \\sum_{i=0}\^{n}(-1)\^{i}\\binom{x}{i}g(i) \\iff g(x) = \\sum_{i=0}\^{n}\\binom{x}{i}f(i) \\tag{BV.Thm 0} \\

将右边代入左边易证,这个方法对于后面的形式都适用


在实际问题中,至少/至多类问题 在不同意义下并不相同

就像钦定意义下,至少/至多 已经确定了至少的部分(至多可以通过钦定补集的至少确定)

在选择意义下,则不管是什么,就是传统意义的至少至多

这也就导致了钦定意义下会发生重复计数


在下文中,\(g(x)\) 都表示 恰好 的计数,相应的,\(f(x)\) 就表示在 钦定/选择意义下的 至少/至多计数

钦定意义下 Under the stipulated sense

至少

\f(x) = \\sum_{i=x}\^{n} \\binom{i}{x} g(i) \\iff g(x) = \\sum_{i=x}\^{n} (-1)\^{i-x} \\binom{i}{x}f(i) \\tag{BV.St.Thm 1} \\

至多

\f(x) = \\sum_{i=0}\^{x}\\binom{n-x}{n-i}g(i) \\iff g(x) = \\sum_{i=0}\^{x} (-1)\^{x-i} \\binom{n-i}{n-x}f(i) \\tag{BV.St.Thm 2} \\

选择意义下 Under the meaning of choice

至少

\f(x) = \\sum_{i=x}\^{n}\\binom{n-x}{n-i}g(i) \\iff g(x) = \\sum_{i=x}\^{n}(-1)\^{i-x}\\binom{n-x}{n-i}f(i) \\tag{BV.Ch.Thm 1} \\

至多

\f(x) = \\sum_{i=0}\^{x}\\binom{x}{i}g(i) \\iff g(x) = \\sum_{i=0}\^{x}(-1)\^{x-i}\\binom{x}{i}f(i) \\tag{BV.Ch.Thm 2} \\

Min-Max 容斥

对于全序集 \(S\),其中元素满足可加减性

\\\min S = \\sum_{T\\subseteq S\\land T\\not=\\varnothing} (-1)\^{\|T\|-1}\\max T\\\\ \\max S = \\sum_{T\\subseteq S\\land T\\not=\\varnothing} (-1)\^{\|T\|-1}\\min T \\

扩展形式:

\\\operatorname{kth}\\max S = \\sum_{T\\subseteq S\\land T\\not=\\varnothing}(-1)\^{\|T\|-k}\\binom{\|T\|-1}{k-1}\\min T\\\\ \\operatorname{kth}\\min S = \\sum_{T\\subseteq S\\land T\\not=\\varnothing}(-1)\^{\|T\|-k}\\binom{\|T\|-1}{k-1}\\max T \\

这么看有点没用,但是它对于期望也是成立的

\\\mathbb E\[\\min S = \sum_{T\subseteq S\land T\not=\varnothing} (-1)^{|T|-1}\mathbb E\\max T\\ \mathbb E\\max S = \sum_{T\subseteq S\land T\not=\varnothing} (-1)^{|T|-1}\mathbb E\\min T \]

\\\mathbb E\[\\operatorname{kth}\\max S = \sum_{T\subseteq S\land T\not=\varnothing}(-1)^{|T|-k}\binom{|T|-1}{k-1}\mathbb E\\min T\\ \mathbb E\\operatorname{kth}\\min S = \sum_{T\subseteq S\land T\not=\varnothing}(-1)^{|T|-k}\binom{|T|-1}{k-1}\mathbb E\\max T \]

集合划分容斥

在某种等价关系下,对于某一组合结构,构成其的元素其可以被划分成若干等价类,有一关于等价类大小的系数 \(F(x)\),记等价类之间的合并关系为 \(G(x)\),集合划分容斥找到容斥系数 \(H(x)\) 使得:

\G(H(x)) = F(x) \\

格路径计数和反射容斥 Lattice path enumeration & André Reflection principle

从 \((x_1,y_1)\) 到 \((x_2,y_2)\) 只能够向右/上走的方案数是:

\\\binom{x_2+y_2-x_1-y_1}{x_2-x_1} \\tag{LPE.Fml 0} \\

Catalan 数 | Catalan Number | Catalan Sequence

定义 Definition

Catalan 数列是序列

\\\left\\{ C_n \\right\\}_{n=0}\^{\\infin} \\

其中 \(C_0 = 1\)

\C_n = \\frac{1}{n+1}\\dbinom{2n}{n}, \\forall n \\ge 1 \\

有以下递推式

\C_n = \\sum_{i=0}\^{n-1}C_iC_{n-i-1} \\

\C_n = \\frac{4n-2}{n+1}C_{n-1} \\


考虑由 \(n\) 个 \(+ 1\) 和 \(n\) 个 \(-1\) 构成的 \(2n\) 项序列

\\\left\\{a_i\\right\\}_{i=0}\^{2n} \\

其部分和满足 (式壹)

\\\sum_{i=1}\^{k} a_i \\ge 0 \\\> (k = 1,2,\\ldots,2n) \\

序列的个数等于第 \(n\) 个 Catalan 数

\C_n = \\frac{1}{n+1}\\dbinom{2n}{n} \\

考虑证明

证明方法是反射容斥

因为直接证明太过复杂,所以考虑正难则反

在 \(2n\) 个位置上选 \(n\) 个,方案数就是 \(\dbinom{2n}{n}\)

记满足 式壹 的序列为可接受的 Acceptable ,不满足的为不可接受的 Unacceptable

记可接受的数量为 \(\{A_n\}{n=0}^{\infin}\) ,不可接受的即为 \(\{U_n\}{n=0}^{\infin}\)

因此

\A_n + U_n = \\dbinom{2n}{n} \\

所以我们考虑第一个是的部分和为负数的 \(k\),即

\\\sum_{i=1}\^{k} a_i = -1 \\

因为是第一个,所以一定有 \(\sum\limits_{i=1}^{k-1}a_i = 0\),则 \(a_k = -1\)

不失一般性,假设 \(k\) 是奇数,对 \(a_i,\forall i \le k\) 取反 \(a_i = -a_i\)

得到新序列 \(\{a_i'\}_{i=0}^{2n}\) ,此时,有 \(n+1\) 个 \(1\), \(n - 1\) 个 \(-1\),这就说明了我们建立了两种关系的双射

所以有 \(U_n\) 等于在 \(n +1\) 个 \(1\) ,\(n-1\) 个 \(-1\)的排列数

\U_n = \\dbinom{n}{n+1 \\ \\ n-1} = \\frac{n!}{(n+1)!(n-1)!} \\

所以有

\\\text{answer}_n = A_n = \\dbinom{2n}{n} - U_n = \\dbinom{2n}{n} - \\dbinom{2n}{n+1} \\

稍微化简

\\\text{answer}_n = \\frac{1}{n+1}\\dbinom{2n}{n} = C_n \\

考虑一般情况,有 \(n\) 个 \(1\),\(m\) 个 \(-1\),不妨假设 \(n\ge m\)

则终点为 \((m,n)\) 的下三角格路径数有

\\\text{answer}_{nm} = \\dbinom{n+m}{n}-\\dbinom{n+m}{n+1} \\

不妨展开

\\\begin{equation} \\begin{split} \\text{Ans}_{nm} \&= \\dbinom{n+m}{n} - \\dbinom{n+m}{n+1}\\\\ \&= \\frac{(n+m)!}{n!m!} - \\frac{(n+m)!}{(n+1)!(m-1)!}\\\\ \&= \\frac{(n+m)!}{n!(m-1)!}(\\frac{1}{m} - \\frac{1}{n+1})\\\\ \&= \\frac{(n+m)!}{n!(m-1)!} \\cdot \\frac{n-m+1}{m(n+1)}\\\\ \&= \\frac{n-m+1}{n+1}\\dbinom{n+m}{n} \\end{split} \\end{equation} \\

这就是拓展的 Catalan 数

稍微转化一下:

从 \((0,0)\) 开始走,终点为 \((n,m)\) ,只能向右、向上走,不能超越 \(y = x+1\) 的方案数

将第一次触碰 \(y = x+1\) 的点后的路径翻折(蓝色),就容易得到不合法的路径的终点 \((m-1,n+1)\)

生成函数

\\\left\\{C_n\\right\\}_{n=0}\^{\\infin} \\overset{\\operatorname{OGF}}{\\longrightarrow} \\frac{1-\\sqrt{1-4x}}{2x} \\

设 \(G(x) = \sum_{n\ge 0} C_nx^n\)

由第一种递推关系则有

\xG\^2(x) = G(x) - 1 \\

解出来就是上式了

两个限制的格路径计数

从 \((0,0)\) 开始走,终点为 \((n,m)\) ,只能向右、向上走,不能触碰 \(y = x+l\) 和 \(y = x+r\) 的方案数

考虑将触碰/超越 \(y=x+l\)/\(y=x+r\) 记作 L/R

对于一段连续的 L/R ,只用记录单个的 L/R

容易发现:恰好为 LRLR... 的路径数很难求

所以考虑求至少为 LRLR... 的路径数

所以最后的答案就是:

\\\sum_{k\\in Z} \\binom{n+m}{n-k(r-l)}\\binom{n+m}{n-k(r-l)+r} \\tag{LPE.Fml 1} \\

HVD 格路径

允许走对角的格路径

现在我们仅考虑下三角 HVD 格路径的方案数,不妨记 \(S(n,m:rD)\) 表示到 \((m,n)\) 且有 \(r\) 个对角线的下三角 HVD 路径数

我们可以将 \(r\) 个对角线拆成 \(r\) 个上和右

易知这个问题等价于

\\\sum_{i=0}\^{n+m-r+1}x_i = n \\

的非负整数解个数

\\\begin{equation} \\begin{split} S(n,m:rD) \&= \\frac{n-m+1}{n+1} \\dbinom{n+1}{r} \\dbinom{n+m-r}{n}\\\\ \&= \\frac{n-m+1}{n+1}\\frac{(n+1)!(n+m-r)!}{r!\\,(n+1-r)!n!\\,(m-r)!} \\end{split} \\end{equation} \\

\\\begin{equation} \\begin{split} S(n, m) \&= \\sum_{r=0}\^{n}S(n,m:rD)\\\\ \&= \\sum_{r=0}\^{n}\\frac{n-m+1}{n+1}\\frac{(n+1)!(n+m-r)!}{r!\\,(n+1-r)!n!\\,(m-r)!} \\end{split} \\end{equation} \\

反射容斥

由于原来的问题涉及到斜线段,所以考虑坐标变化,也就是对于 \((x, y)\),记 \(u = x+y,v = x-y\),转化成 \((u,v)\)

所以向右/上的移动转化成了 \((1,\pm 1)\)

这里给出公式:

\N_{\\text{valid}} = \\sum_{\\sigma \\in G} \\text{sgn}(\\sigma) \\cdot \\binom{ (u - a) + (v - b) }{ u - \\sigma(a) } \\tag{KmG.} \\

其中,\((a,b)\) 是起点坐标,\((u,v)\) 是终点坐标,\(\text{sgn}\) 表示置换 \(\sigma\) 的符号,\(\sigma\) 表示镜像后的置换

这个公式就是 Karlin-McGregor 公式 ,也就是 LGV 引理 的特殊情况

Tricks

生成函数 Tricks

生成函数求解递推式

常系数齐次递推式

用来求解类似这种的递推式

\f_n = \\sum_{i=1}\^{k}a_if_{n-i} \\

其中,\(a_i\)、\(k\) 是与 \(n\) 无关的常数

令 \(F(x) = \sum\limits_{n}f_nx^n\),是 \(f_{n}\) 的 OGF

所以有:

\(1-\\sum_{i=1}\^{k}a_ix\^i)F(x) = Q(x)F(x) = \\sum_{i=0}\^{k-1} (f_i - \\sum_{j=1}\^{i}a_jf_{i-j})x\^i = P(x) \\

所以

\F(x) = \\frac{P(x)}{Q(x)} \\

由于 \(Q(x)\) 高阶的时候很难求,这里我们暂时考虑 \(k = 2\),也就是二阶常系数递推的情况:

\f_n = pf_{n-1}+qf_{n-2} \\

考虑 \(f_0 = m\),\(f_i = 0,\forall i \lt 0\)

这个时候:

\F(x) = \\frac{f_0}{1-px-qx\^2} \\

裂项:

\\\frac{f_0}{1-px-qx\^2} = \\frac{A}{1-\\varphi_1x} +\\frac{B}{1-\\varphi_2x} \\

容易知道 \(\varphi_1\)、\(\varphi_2\) 是很容易求的,就是 \(1-px-qx^2 = 0\) 的两个解:

\\\varphi_{1,2} = \\frac{p\\pm \\sqrt{p\^2+4q}}{2} \\

我们知道 \(A(1-\varphi_2x)+B(1-\varphi_2x) = f_0\)

解得:

\\\begin{cases} A = \\frac{\\varphi_1 f_0}{\\varphi_1 - \\varphi_2}\\\\ B = \\frac{\\varphi_2 f_0}{\\varphi_2 - \\varphi_1} \\end{cases} \\

知道:

\\\begin{split} f_n \&= A\\varphi_1\^n + B\\varphi_2\^n\\\\ \&= \\frac{(p+\\sqrt{p\^2+4q})\^{n+1}-(p-\\sqrt{p\^2+4q})\^{n+1}}{2\^{n+1}\\sqrt{p\^2+4q}} f_0 \\end{split} \\


我们可以把 \(k\) 阶常系数递推式化成对应的特征方程形式:

\1-\\sum_{i=1}\^{k}a_k\\lambda\^i = 0 \\

对应的有 \(r\) 个根,\(r_i,i=1,2,\ldots,k\) ,\(m_i,i=1,2,\ldots,r\) 是根的重数,分两种情况讨论:

\(m_i = 1,\forall i\in \{1,2,\ldots,r\}\)

\f_n = \\sum_{i=1}\^{r}C_i\\lambda_i\^n \\

\(C_i\) 是与 \(n\) 无关的常数

\(m_i\not= 1, \exist i\in \{1,2,\ldots,r\}\)

\f_n = \\sum_{i=1}\^{r}\\left(\\sum_{j=0}\^{m_i-1}C_{i,j}n\^j \\right)\\lambda_{i}\^n \\

\(C_{i,j}\) 是与 \(n\) 无关的常数

生成函数 求 递推式

在已知一个生成函数的闭形式的时候,是可以求出它对应数列的递推式的

即我们可以通过构造该生成函数的微分方程并且比对系数

具体的要看情况,大概率是求导,然后找导函数和原本函数的代数关系

实践

来几道题

现在是飞行实践时间



设 \(n\) 是正整数,证明:

\\\sum_{k=0}\^{n}(-1)\^k\\dbinom{n}{k}\^2 = \\begin{cases} \\begin{split} 0 \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\,\&n \\equiv 1\\mod{2} \\\\ (-1)\^{\\frac{n}{2}}\\dbinom{n}{n/2},\&n \\equiv0 \\mod 2 \\end{split} \\end{cases} \\

证明

\(\binom{n}{k}^2\) 并不好处理,所以考虑拆开

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

很像卷积形式,考虑到 \(\binom{n}{k} = \binom{n}{n-k}\),所以:

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

令 \(F(x) = \sum\limits_{k}(-1)^k\dbinom{n}{k}x^k\),\(G(x) = \sum\limits_{k}\dbinom{n}{k}x^k\)

这个时候:\((F\cdot G)(x) = \sum\limits_{k}\left(\sum_{a+b=k}(-1)^a\binom{n}{a}\binom{n}{b}\right) = F(x)G(x) = (1-x)^n \cdot (1+x)^n = (1-x^2)^n\)

所以我们所求变为 \(x\^n(F\cdot G)\),显然,这个卷积只存在偶数项,所以考虑 \(n = 2m\) 的情况

\\\begin{equation} \\begin{split} \[x\^n(F\cdot G)(x) &=x\^n (1-x^2)^n \\ &=x\^n \sum_{i=0}^{n}(-1)^{n-i}\dbinom{n}{i}x^{2i} \\ &=(-1)^{m}\dbinom{n}{m} \end{split} \end{equation} \]

即:\((-1)^{\frac{n}{2}}\binom{n}{n/2}\)

\(\square\)



来道简单题放松一下

\\\sum_{i=0}\^{n}i\\dbinom{n}{i} \\

和 \(\sum\limits_{i=0}^{n}\binom{n}{i} = 2^n\) 很像,所以考虑化归到这个上

观察到 \(i \cdot\) ,所以考虑 \(\vartheta\) 算子

令 \(F(x) = \sum\limits_{i=0}^{n} \binom{n}{i}x^i = (1+x)^n\)

有 \(\vartheta F(x) = \sum\limits_{i = 1}^{n}i\binom{n}{i} = nx(1+x)^{n-1}\),\(i=0\)的那一项值为 \(0\) ,可以忽略

带入 \(x = 1\),有

\\\begin{equation} \\begin{split} \\sum_{i=0}\^{n} i\\dbinom{n}{i} x\^i \&=n \\cdot x \\cdot (1+x)\^{n-1}\\\\ \&=n \\times 1 \\times (1+1)\^{n-1}\\\\ \&=n2\^{n-1} \\end{split} \\end{equation} \\



设 \(n\) 和 \(k\) 是正整数,证明:

\\\sum_{k=0}\^{n}k\\dbinom{n}{k}\^2 = n\\dbinom{2n-1}{n-1} \\

又有 \(\binom{n}{k}^2\),老套路,将它拆开得到 \(\sum\limits_{i=0}^{n}k\binom{n}{k} \cdot \binom{n}{n-k}\)

令 \(F(x) = \sum\limits_{k}k\binom{n}{k}x^k = \vartheta ((1+x)^n) = nx(1+x)^{n-1}\),\(G(x) = \sum_{k}\binom{n}{k}x^k = (1+x)^{n}\)

所以所求即为

\\\begin{equation} \\begin{split} \[x\^n(F\cdot G)(x) &=x\^n\left nx(1+x)\^{n-1} \\cdot (1+x)\^n \\right\\ &=x\^nnx(1+x)^{2n-1}\\ &=x\^n\sum_{i=1}^{2n-1}n\dbinom{2n-1}{i-1}x^i\\ &=n\dbinom{2n-1}{n-1} \end{split} \end{equation} \]

即证 \(\square\)



这是道容斥题

对于集合 \(A\)、\(B\),其中 \(|A|=n\),\(|B|=m\),求 \(\#\{f:A\to B \mid \forall y\in B,\exist x\in A,\text{s.t. } f(x)=y \}\),即求从 \(A\) 到 \(B\) 的满射个数

这里给出公式:

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

首先,这个问题可以转化成将 \(n\) 个不同的球放进 \(m\) 个不同的盒子中的方案数

考虑钦定 \(k\) 个盒子为空,剩下的 \(m-k\) 个盒子放 \(n\) 个球,方案数 \((m-k)^n\)

容斥出来就是

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

根据这个转化的问题,我们可以给出这个值:

\\\begin{equation} \\begin{split} \\sum_{k=0}\^{m} (-1)\^{k}\\dbinom{m}{k}(m-k)\^{n} = \\begin{cases} 0, \&n\\lt m\\\\ m!,\&m=n\\\\ m!\\begin{Bmatrix}m\\\\n\\end{Bmatrix},\&m\\gt n \\end{cases} \\end{split} \\end{equation} \\



这还是道容斥题

#6160. 「美团 CodeM 初赛 Round A」二分图染色

可以放 OI 题中的,我不想放

因为是纯推式子题

原问题可以转化为对于一个二分完全图,我们要找到两个匹配,使得它们覆盖点集无交的方案数

我们先考虑确定一组匹配的方案数

对于 \(n\) 个节点的完全二分图,任意确定一组匹配的方案数就是:\(\sum\limits_{i=0}^{n}\binom{n}{i}n^{\underline{i}}\),也就是 \(\sum\limits_{i=0}^{n}i!\binom{n}{i}\)(枚举选的点的个数 \(i\),将其连接到另一边,另一边也需要选 \(i\) 个点出来,一边有顺序,一边无顺序)

不妨令 \(f_n = \sum\limits_{i=0}^{n}i!\binom{n}{i}^2\)

容易发现,\(f^2_n\) 就是找到两个匹配的方案数,但是这样子会出现重叠

但稍微想一下,我们可以钦定有 \(i\) 个地方重叠,然后剩余的随便放,然后就可以容斥了

最终可以得到:

\\\sum_{i=0}\^{n}(-1)\^ii!\\dbinom{n}{i}\^2f_{n-i}\^{2} \\



P3978 TJOI2015 概率论

这是一道生成函数题

虽然是道紫,但是是纯推式子

前置知识:Catalan 数(如果不知道可以看着我的这一篇博客 1

首先,我们容易知道,节点数为 \(n\) 的二叉树个数是第 \(n\) 个 Catalan 数(考虑左子树有 \(i\) 个节点,右子树就有 \(n-i-1\) 个节点,然后就能写出递推式)

考虑它的生成函数 \(C(x) = \sum\limits_{n}C_nx^n\),由递推式 \(C_n = \sum_{i=0}^{n-1}C_iC_{n-i-1}\) 得到:

\C = 1 + xC\^2 \\

解得

\C(x) = \\frac{1-\\sqrt{1-4x}}{2x} \\

这里我们不妨令 \(a_i\) 表示节点数为 \(i\) 的二叉树的叶子节点个数之和,容易知道:(考虑左右子树的叶子结点个数)

\a_n = 2\\sum_{i=0}\^{n-1}a_iC_{n-i-1} \\

考虑它的生成函数 \(A(x) = \sum\limits_{n}a_nx^n\),由递推式得:

\A(x)-x=2xC(x)A(x) \\

解得:

\A(x) = \\frac{x}{1-2xC(x)} \\

也就是:

\A(x) = \\frac{x}{\\sqrt{1-4x}} \\

所以:

\\\begin{equation} \\begin{split} a_n \&= \[x\^nA(x)\\ &= x\^{n-1}(1-4x)^{\frac{1}{2}}\\ &= \boxed{\binom{2n-2}{n-1}} \end{split} \end{equation} \]

所以:

\\\boxed{ \\mathbb{E}_{T\\sim \\text{Unif}(\\mathcal{T}_n)}\\left\[\\,\|\\{u\\in V(T)\\mid \\text{son}(u)=0\\}\|\\,\\right = \frac{\binom{2n-2}{n-1}}{\frac{1}{n+1}\binom{2n}{n}} = \frac{n(n+1)}{2(2n-1)} } \]

其中 \(V(T)\) 表示 \(T\) 的顶点集,满足 \(|V(T)|=n\),\(\mathcal T_n\) 表示所有大小为 \(n\) 的二叉树的集合



证明 Min-Max 容斥(不考虑拓展)

对于普通形式

这里考虑证明 \(\max\) 的情况,\(\min\) 的情况因为对称性易证

我们考虑构造映射:\(f : S \to A\),其中 \(A = \{\{1,2,3,\ldots,i\} \mid 1\le i \le |S|\}\)

假设 \(x = \operatorname{kth} \max S\),则 \(f(x) = \{1,2,3,\ldots,k\}\),这是个双射我们发现 \(f(\max\{x,y\}) = f(x) \bigcap f(y)\),\(f(\min\{x,y\}) = f(x) \bigcup f(y)\),所以:

\\\begin{split} \\left\|f(\\max S)\\right\| \&= \\left\|\\bigcup_{x \\in S} f(x) \\right\|\\\\ \&= \\sum_{T \\subseteq S} (-1)\^{\|T\|-1} \\left\|\\bigcap_{x \\in T} f(x) \\right\|\\\\ \&= \\sum_{T \\subseteq S} (-1)\^{\|T\|-1} \\left\|f(\\min T) \\right\| \\end{split} \\

用 \(f^{-1}\) 映射回去就行了

对于期望

我们发现:

\\\begin{split} \\mathbb E\[\\max {S} &= \sum_{y} \text{Pr}\{y=x \} \max S\\ &= \sum_{y} \text{Pr}\{y=x \} \sum_{T\subseteq S \land T \not = \varnothing} (-1)^{|T|-1} \min T\\ &= \sum_{T\subseteq S \land T \not= \varnothing} (-1)^{|T|-1}\sum_{y}\text{Pr}\{y=x \}\min T\\ &= \sum_{T\subseteq S \land T \not= \varnothing} (-1)^{|T|-1}\mathbb E\\min T \end{split} \]

对称性易证 \(\min\) 的情况



P4931 MtOI2018 情侣?给我烧了!(加强版)

考虑 \(f(n,k)\) 表示 \(n\) 排中 \(k\) 对情侣坐对的方案数,设 \(D_n\) 表示 \(n\) 对情侣全部坐乱的方案数

所以:

\f(n,k)=\\binom{n}{k}\^2 D_{n-k}k! \\ 2\^{k} \\

所以有:

\\\sum_{k=0}\^{n}f(n,k) = (2n)! = \\sum_{k=0}\^{n}\\binom{n}{k}\^2 D_{n-k} k! 2\^k \\

稍微变一下型:(可以自己代一下)

\\\sum_{k=0}\^{n}\\frac{2\^k}{k!}\\cdot \\frac{D_{n-k}}{\[(n-k)!^2} = \frac{(2n)!}{(n!)^2} \]

由于左侧很像卷积的形式,所以考虑令 \(D(x) = \sum\limits_{n}\frac{D_{n}}{n!^2}x^n\)

有:

\e\^{2x}D(x) = (1-4x)\^{-\\frac{1}{2}} \\

解出来 \(D(x) = e^{-2x}(1-4x)^{-\frac{1}{2}}\)

考虑求导求递推式:

\D'(x) = 8x(1-4x)\^{-1}D(x) \\

即:

\(1-4x)D'(x) = 8xD(x) \\

对比系数:

\\\frac{4D_n}{n!(n-1)!}= \\frac{D_{n+1}}{n!(n+1)!} - \\frac{8D_{n-1}}{\[(n-1)!^2} \]

解得:

\D_n = 4n(n-1)D_{n-1}+8n(n-1)\^2D_{n-2} \\



AT_abc235_g ABC235G Gardens

不知道啊,生成函数直接推出来了

依旧:组合意义天地灭,代数推导保平安

考虑一个盒子的生成函数:\(F(x,y,z) = (1+z)(1+y)(1+z)-1\),每个苗都可以选一个或者说不选,但要减去全部都不选的方案

所以有:

\\\begin{split} \\text{Ans} \&= \\sum_{a=0}\^{A}\\sum_{b=0}\^{B}\\sum_{c=0}\^{C}\[x\^ay\^bz\^cF(x,y,z)\\ &= \sum_{a=0}^{A}\sum_{b=0}^{B}\sum_{c=0}^{C}x\^ay\^bz\^c\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}(1+x)^i(1+y)^i(1+z)^i\\ &= \sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}\sum_{a=0}^{A}x\^a(1+x)^i\sum_{b=0}^{B}y\^b(1+y)^i\sum_{c=0}^{C}z\^c(1+z)^i\\ &= \sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}\sum_{a=0}^{A}\binom{i}{a}\sum_{b=0}^{B}\binom{i}{b}\sum_{c=0}^{C}\binom{i}{c} \end{split} \]

容易发现后面的式子可以递推

来几道 OI 题

AT_arc110_d ARC110D Binomial Coefficient is Fun

tag范德蒙德卷积组合数生成函数

我懒得写过程了

最后求出来是这个:

\\[x\^m\dfrac{x^{\sum{i=1}^{n}A_i}}{(1-x)^{\sum_{i=1}^{n} A_i + n + 1}} \]

稍微拆开,就容易得到答案为 \(\dbinom{n+m}{m-\sum_{i=1}^{n}A_i}\)

cpp 复制代码
ll C(ll n, ll k) {
	if (k < 0 || k > n) return 0;
	k = min(k, n - k);
	
	ll numerator = 1, denominator = 1;
	for (ll i = 1; i <= k; i++) {
		numerator = numerator * ((n - i + 1) % mod) % mod;
		denominator = denominator * i % mod;
	}
	return numerator * fpow(denominator, mod - 2) % mod;
}

void solve() {
    int n;
	ll m;
	cin >> n >> m;
	
	ll sum = 0;
	for (int i = 0; i < n; i++) {
		ll x;
		cin >> x;
		sum += x;
	}
	
	if (sum > m) cout << 0 << "\n";
	else cout << C(m + n, sum + n) << "\n";
}

CF785D Anton and School - 2

tag组合数

考虑钦定最后一个 (

对于 \(i \text{ s.t. } \text{str}_i=\text{(}\),记 l[i] 表示其左边的 ( 个数(包含自己),r[i] 表示其右边 ) 的个数

所以其贡献为:

\\\sum_{j=0}\^{\\min{l_i-1, r_i-1}} \\dbinom{l_i-1}{j}\\dbinom{r_i}{j+1} \\

套上范德蒙德卷积得到 \(\dbinom{l_i+r_i-1}{l_i}\)

cpp 复制代码
ll ans = 0;
for (int i = 1; i <= n; i++)
	if (str[i - 1] == '(')
		ans = (ans + C(l[i] + r[i + 1] - 1, l[i])) % mod; // 计算的时候 r[i] 把 i 算进去了,所以 r[i] 和 r[i +1] 其实是等价的

CF1332E Height All the Same

tag二项式定理组合数

稍微观察一下就会发现,整个网格中奇数的个数的奇偶性是一个不变量

分两种情况:

  • \(nm \equiv 1\mod 2\),这种不论什么情况都满足,答案是 \((r-l+1)^{nm}\)
  • \(nm\equiv 0 \mod 2\),奇数个数的奇偶性必须为偶数(即奇数个数为偶数)

现在考虑第二种

用 \(o\) 表示奇数个数,\(e\) 表示偶数个数

所以答案就是:

\\\sum_{i\\equiv 1 \\mod 2} \\dbinom{nm}{i}o\^ie\^{nm-i} \\

很像二项式定理,所以考虑一下:

\\\begin{equation} \\begin{split} (o+e)\^{nm} \&=\\sum_{i=0}\^{nm}\\dbinom{nm}{i}o\^ie\^{nm-i}\\\\ \&=\\sum_{i\\equiv0 \\mod 2}\^{mn} \\dbinom{nm}{i}o\^ie\^{nm-i} + \\sum_{i\\equiv 1\\mod 2} \\dbinom{nm}{i}o\^ie\^{nm-i} \\end{split} \\end{equation} \\

在考虑一下 \((o-e)^{nm}\) (这个的奇偶分开是异号的)

\(o-e)\^{nm}=\\sum_{i\\equiv0 \\mod 2}\^{mn} \\dbinom{nm}{i}o\^ie\^{nm-i} - \\sum_{i\\equiv 1\\mod 2} \\dbinom{nm}{i}o\^ie\^{nm-i} \\

所以答案就是:

\\\dfrac{(o+e)\^{nm}-(o-e)\^{nm}}{2} \\

cpp 复制代码
cin >> n >> m >> l >> r;

ll expond = (ll)n * m;

if (expond & 1)
	cout << fpow(r - l + 1, expond) << "\n";
else {
	ll k = r - l + 1;
	ll odd = (r >> 1) - ((l - 1) >> 1);
	ll even = k - odd;
	ll ans = (fpow(k, expond) + fpow(odd - even, expond)) % mod;
	ans = ans * fpow(2, mod - 2) % mod;
	cout << ans << "\n";
}

#6160. 「美团 CodeM 初赛 Round A」二分图染色

tag 容斥递推生成函数二分图

式子在上面

很明显,如果使用 \(f_n\) 的通项公式的话会 TLE,考虑推递推式

打表发现有可能是个二阶递推式,其形式为:

\f_n = a_nf_{n-1}+b_nf_{n-2} \\

这个看起来并不好求

考虑将 \(f_n\) 展开

\f_n = \\sum_{i=0}\^{n}i!\\dbinom{n}{i}\^2 = \\sum_{i=0}\^{n}\\frac{(n!)\^2}{i!(n-i)!\^2} = \\sum_{i=0}\^{n}\\frac{(n!)\^2}{(i!)\^2(n-i)!} \\

构造它的指数生成函数 \(F(x) = \sum\limits_{n}f_n\frac{x^n}{n!}\)

代入:

\\\begin{equation} \\begin{split} F(x) \&= \\sum_{n}\\left(\\sum_{i=0}\^{n}\\frac{(n!)\^2}{(i!)\^2(n-i)!}\\right) \\cdot\\frac{x\^n}{n!}\\\\ \&= \\sum_{n}\\sum_{i=0}\^{n}\\frac{n!}{(i!)\^2(n-i)!}x\^n \\end{split} \\end{equation} \\

形式不好看,发现了 \((i!)^2\) 项,所以考虑分离,考虑变换求和下标

令 \(n = i + m\),所以

\\\begin{equation} \\begin{split} F(x) \&= \\sum_{i}\\sum_{m}\\frac{(i+m)!}{(i!)\^2m!}x\^{i+m}\\\\ \&= \\sum_{i}\\frac{x\^i}{i!}\\sum_{m}\\frac{(i+m)!}{i!m!}x\^m \\end{split} \\end{equation} \\

发现 \(\binom{i+m}{i} = \frac{(i+m)!}{i!m!}\),所以后面这个求和为:\(\sum\limits_{m}\binom{i+m}{i}x^m = \frac{1}{(1-x)^{i+1}}\)

所以:

\\\begin{equation} \\begin{split} F(x) \&= \\sum_{i}\\frac{x\^i}{i!}\\frac{1}{(1-x)\^{i+1}}\\\\ \&= \\frac{1}{1-x}\\sum_{i}\\frac{1}{i!}\\left(\\frac{x}{1-x} \\right)\^i \\end{split} \\end{equation} \\

是 \(e^x\) 泰勒展开的经典形式

所以

\\\begin{equation} \\begin{split} F(x) = \\frac{1}{1-x}e\^{\\frac{x}{1-x}} \\end{split} \\end{equation} \\

所以 \(F(x)\) 的闭形式就求出来了,对等式两边求 \(\ln\)

\\\begin{equation} \\begin{split} \\ln F(x) = -\\ln(1-x)+\\frac{x}{1-x} \\end{split} \\end{equation} \\

关于 \(x\) 求导得:

\\\begin{equation} \\begin{split} \\frac{F'(x)}{F(x)} \&= \\frac{1}{1-x}+\\frac{1}{(1-x)\^2}\\\\ \&= \\frac{2-x}{(1-x)\^2} \\end{split} \\end{equation} \\

所以有:

\(1-x)\^2F'(x) = (2-x)F(x) \\

通过比较系数,可以得到递推式

我们知道 \(F'(x) = \sum\limits_{n}f_{n+1}\frac{x^n}{n!}\)

将左边展开得

\(x\^2-2x+1)F'(x) = (2-x)F(x) \\

左边的总系数:

\\\frac{f_{n+1}}{n!} - 2n \\frac{f_n}{n!} + n(n-1) \\frac{f_{n-1}}{n!} \\

右边的总系数:

\2 \\frac{f_n}{n!} - n \\frac{f_{n-1}}{n!} \\

比较得到:

\f_{n+1} = 2(n+1)f_n - n\^2f_{n-1} \\

也就是:

\f_n = 2nf_{n-1}-(n-1)\^2 f_{n-2} \\

这个数列在 OEIS 上已有收录,为 OEIS A002720,网址:A002720

描述为:

a(n) is also the total number of increasing subsequences of all permutations of 1..n (see Lifschitz and Pittel).

------ N. J. A. Sloane, May 06 2012

a(n) is also the number of matchings in the complete bipartite graph K(n,n).

------ Sharon Sela (sharonsela(AT)hotmail.com), May 19 2002

a(n) is also the number of 12-avoiding signed permutations in B_n (see Simion ref).

a(n) is also the order of the symmetric inverse semigroup (monoid) I_n. - A. Umar, Sep 09 2008

......

第二句就是我们给出的定义

cpp 复制代码
f[0] = 1, f[1] = 2;
for (int i = 2; i <= n; i++) 
    f[i] = (2ll * i * f[i - 1] % mod - 1ll * (i - 1) * (i - 1) % mod * f[i - 2]) % mod;

for (int i = 0; i <= n; i++) {
    ll temp = 0;
    int sign = (i & 1) ? -1 : 1;

    temp = C(n, i) * C(n, i) % mod;
    temp = temp * f[n - i] % mod * f[n - i] % mod;

    temp = temp * fact[i] % mod;

    answer = (answer + sign * temp) % mod;
}

answer = (answer + mod) % mod;

cout << answer << "\n";

不过你以为这就完了吗?

我们知道,有些棋盘问题可以转化成二分图问题,反之亦然

这道题经过转化,可以转化成在棋盘上面放车,使得它们互相不攻击

而对于 A002720 的描述中有:

a(n) is also the number of non-attacking placements of k rooks on an n × n board, summed over all k >= 0.

------ Vaclav Kotesovec, Aug 28 2012

具体的推导可以参考这篇文章:LOJ6160 美团 CodeM 初赛 Round A 二分图染色【容斥】

#6244. 七选五

tag容斥错排

钦定 \(x\) 个位置匹配上,剩余的位置必须不匹配

利用容斥:全部错排 = 全部乱排 - 排对一个位置其余全部乱排 + 排对两个位置其余乱排 - ...

式子就是:

\\\binom{k}{x}\\sum_{i=0}\^{k-x}(-1)\^{i}(n-x-i)\^{\\underline{k-x-i}}\\binom{k-x}{i} \\

P1450 HAOI2008 硬币购物

tag动态规划容斥背包

有数量限制就很难堪,因为这样复杂度很不好

所以考虑容斥将数量限制给消掉

我们就不妨随机钦定一些硬币的数量是 \(d_i+1\)

这里记完全背包算出来的答案是 \(f_n\)

则:

\\\sum_{i=0}\^{4}(-1)\^{i}f_{s-\\sum\\limits_{a_{j}\\lt a_{j+1} \\land \|\\{a\\}\|=i} (d_{a_j} +1) c_{a_j} } \\

\(s\) 减去的是 \(\sum\limits_{a_j\lt a_{j+1} \land |\{a\}|=i}(d_{a_j}+1)c_{a_j}\)

cpp 复制代码
for (int i = 1; i <= 4; i++)
    for (int j = c[i]; j <= (int)1e5; j++)
        dp[j] += dp[j - c[i]];

for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 4; j++)
        cin >> d[j];
    int s;
    cin >> s;

    ll ans = 0;
    for (int mask = 0; mask < (1 << 4); mask++) {
        int bits = __builtin_popcount(mask);
        int sum = 0;
        for (int j = 0; j < 4; j++) 
            if (mask & (1 << j)) 
                sum += (d[j + 1] + 1) * c[j + 1];

        if (s >= sum) {
            if (!(bits & 1)) 
                ans += dp[s - sum];
            else 
                ans -= dp[s - sum];

        }
    }
    cout << ans << "\n";
}

P4099 HEOI2013 SAO

tag容斥树上背包

首先,我们知道全是 < 的情况,对于节点 \(i\),其想要成为以其为根的时候的最小,概率为:

\\\operatorname{Pr}\\{w_i = \\min_{j\\in \\text{subtree}(i)} w_j\\} = \\frac{1}{\\text{size}_i} \\

其中,\(\text{subtree}\) 表示以 \(i\) 为根的子树,\(\text{size}_i\) 表示 \(|\text{subtree}(i)|\),即以 \(i\) 为根的子树的大小

这个时候总的方案数为:

\\\frac{n!}{\\prod\\limits_{i = 1}\^{n}\\text{size}_i} \\

考虑和 Permutation 一样的做法:将 > 替换成 <?,其中 ? 可以替代 <>

所以我们考虑将 ? 的边删除,这样就形成了很多小的只包含 < 的连通块

我们不妨设 \(f_{u,i}\) 表示对于 \(\text{subtree}(u)\) ,其连通块大小为 \(i\) 时的概率

容易发现,对于 (u,v)='>' 并改成 ?,\(f_{u,i} \leftarrow f_{u,i}\cdot \sum\limits_{v}\sum\limits_{j=1}^{\text{size}v}f{v,j}\)

对于剩下的情况:(容斥 < 的个数,系数是 \((-1)^{\text{cnt}_{\text{`<`}}}\))

\\\begin{equation} \\begin{split} \\begin{cases} f_{u,i+j} \\leftarrow -f_{u,i} \\cdot f_{v,j} \\cdot \\frac{i}{i+j}, \&(u,v) = \\text{'\>'} \\ \\land \\ (u, v) \\to \\text{'\<'} \\\\ f_{u,i+j} \\leftarrow f_{u,i} \\cdot f_{v,j} \\cdot \\frac{i}{i+j}, \&(u,v) = \\text{'\<'} \\end{cases} \\end{split} \\end{equation} \\

第一行的 \(-\) 是因为将 > 改成了 << 的数量多了 \(1\) 对应的容斥系数要乘 \(-1\)

这就是一个树上背包,分析出来复杂度是 \(\mathcal O(n^2)\)

cpp 复制代码
void DFS(int u, int father) {
	siz[u] = 1;
	dp[u][1] = 1;
	
	for (edge _ : adj[u]) {
		int v = _.to;
		if (v == father) continue;
		DFS(v, u);
		
		for (int i = 0; i <= siz[u] + siz[v]; i++) temp[i] = 0;
		
		ll sum_v = 0;
		for (int j = 1; j <= siz[v]; j++)
			sum_v = (sum_v + dp[v][j]) % mod;
		
		if (_.weight == '>') for (int i = 1; i <= siz[u]; i++)
			temp[i] = (temp[i] + dp[u][i] * sum_v) % mod;
		
		for (int i = 1; i <= siz[u]; i++)
			for (int j = 1; j <= siz[v]; j++) {
				if (_.weight == '>') {
					temp[i + j] = (temp[i + j] - dp[u][i] * dp[v][j] % mod * i % mod * inv[i + j]) % mod;
//					temp[i] = (temp[i] + dp[u][i] * sum_v % mod);
				} else
					temp[i + j] = (temp[i + j] + dp[u][i] * dp[v][j] % mod * i % mod * inv[i + j]) % mod;
			}
		
		siz[u] += siz[v];
		for (int i = 1; i <= siz[u]; i++) dp[u][i] = temp[i];
	}
	
}

最后的答案就是

\\\text{ans} = n!\\sum_{i=1}\^{n} f_{1,i} \\

AT_abc173_f ABC173F Intervals on Tree

tag点-边容斥(有点没看出来,但是课件这么讲的)、平面图欧拉公式

*update:点-边容斥其实就是利用平面图欧拉公式求出来的:\(C = |V|-|E|\),其中 \(C\) 是连通块个数

对于图 \(G\) 的导出子图 \(G' = (V',E')\),根据平面图欧拉公式:

\C = \|V'\| - \|E'\| \\

现在考虑有多少个点

\\\begin{equation} \\begin{split} \|V'\| \&= \\sum_{l=1}\^{n}\\sum_{r=l+1}\^{n}(r-l+1)\\\\ \&= \\sum_{l=1}\^{n}\\sum_{\\text{len} = 1}\^{n-l+1}\\text{len}\\\\ \&= \\sum_{l=1}\^{n}\\frac{(n-l+1)(n-l+2)}{2}\\\\ \&= \\sum_{l=1}\^{n} \\frac{l(l+1)}{2} \\end{split} \\end{equation} \\

有多少条边:

很明显,直接统计并不现实

所以考虑边 \((u,v)\) 对于答案的贡献:

\((u,v)\) 对于 \(l\le u \le v \le r\) 的区间都有贡献

所以:

\\\begin{equation} \\begin{split} \|E'\| \&= \\sum_{(u,v) \\in E} u(n - v+1) \\end{split} \\end{equation} \\

答案就是 \(|V'|-|E'|\)

cpp 复制代码
for (int i = 1; i <= n; i++) answer += 1ll * i * (i + 1) / 2;
for (int i = 1; i < n; i++) answer -= 1ll * e[i].u * (n - e[i].v + 1);

附录 & 后记

附录 : 标签索引

题目标签汇总

题目 标签
ARC110D Binomial Coefficient is Fun 范德蒙德卷积、组合数、生成函数
CF785D Anton and School - 2 组合数
CF1332E Height All the Same 二项式定理、组合数
LOJ6160 二分图染色 容斥、递推、生成函数、二分图
LOJ6244 七选五 容斥、错排
P1450 硬币购物 DP、容斥、背包
P4099 SAO 容斥、树上背包
ABC173F Intervals on Tree 点-边容斥、平面图欧拉公式

按标签频次统计

标签 出现次数
容斥 5(LOJ6160, LOJ6244, P1450, P4099, ABC173F)
组合数 2(ARC110D, CF785D, CF1332E)
生成函数 2(ARC110D, LOJ6160)
递推 1(LOJ6160)
二分图 1(LOJ6160)
错排 1(LOJ6244)
DP / 背包 1(P1450)
树上背包 1(P4099)
点-边容斥 / 平面图欧拉公式 1(ABC173F)
二项式定理 1(CF1332E)

后记

我也没啥说的,笔者的水平也就那样,写成这样已经很不容易了

到最后统计 103000 字,共计 37689 字符

参考资料

*[EGF]: Exponential Generating Function
*[OGF]: Origin Generating Function

相关推荐
_Narcissus_8 小时前
排序算法总结表格
c语言·数据结构·c++·笔记·算法·排序算法·总结
aichitang202414 小时前
快乐泛函每一天!内积空间
c++·python·数学·算法·机器学习·ai·泛函分析
闻缺陷则喜何志丹15 小时前
【计算几何 第九章】Delaunay三角剖分:高度插值
数学·计算几何·高度插值·德劳内三角剖分
铸人3 天前
再论勾股定理成立的条件-15
数学·数论·复数
铸人5 天前
再论勾股定理成立的条件-9
数学·几何学·数论·复数
OuO-27 天前
笔试强训 Day 43:kotori 和抽卡(二)、ruby 和薯条、循环汉诺塔
数学·前缀和·二分查找·动态规划·排序·滑动窗口·循环汉诺塔
Luhui Dev8 天前
如何在 WorkBuddy 中使用大角几何:从 MCP 接入到 AI 几何作图
人工智能·数学·算法·agent·luhuidev
金銀銅鐵11 天前
[Python] 借助 Turtle 来展示汉诺塔
python·数学
雪碧聊技术12 天前
【数学/高数】洛必达法则详解:从原理到实战例题(附手写笔记解析)
数学·洛必达法则·等价无穷小