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 \\
记为:
\\
常见数列生成函数
\\<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 \\
| 指数生成函数
标准形式
\\
常见数列生成函数
\\<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} \\
这是一道生成函数题
虽然是道紫,但是是纯推式子
前置知识: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\) 的情况
考虑 \(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} \\
不知道啊,生成函数直接推出来了
依旧:组合意义天地灭,代数推导保平安
考虑一个盒子的生成函数:\(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 字符
参考资料
-
课件
-
与
deepseek的激情互喷
*[EGF]: Exponential Generating Function
*[OGF]: Origin Generating Function