常见结论

结论 1:\(n\ \&\ m=m\) 时,\(\text C(n,m)\) 是奇数。

证明戳这

结论 2:\(\sum_{i=0}^n \text{C}^2(n,i)=\text{C}(2n,n)\)

两个盒子各有 \(n\) 个球,共取 \(n\) 个球的方案数是 \(\text{C}(2n,n)\),这也相当于一个盒子取 \(i\) 个,另一个取 \(n-i\) 个。所以实际上这可以拓展到两个盒子有 \(n,m\) 个球的情况。

结论 3:\(\text{C}(n,m)=\text{C}(n-1,m-1)+\text{C}(n-1,m)\)

\(n\) 个元素取或不取。

结论 4:\(\sum_{i=0/j}^{n}\text C(i,j)=\text C(n+1,j+1)\)

证明用归纳法,可以证明 \(n=0\) 的情况成立。然后有:

\[\sum_{i=0/j}^{n}\text C(i,j)=\sum_{i=0/j}^{n-1}\text C(i,j)+\text C(n,j) \]

\[=\text C(n,j+1)+\text C(n,j)=\text C(n+1,j+1) \]

结论 5:\(\sum_{i=0}^n i^2\text{C}(n,i)=2^{n-2}n(n+1)\)

结论 6:

\[D(n)=n!\sum_{i=0}^n\frac{(-1)^i}{i!} \]

\[=n\cdot D(n-1)+(-1)^n \]

这个可以用二项式反演证!令 \(f(i)\) 为长度为 \(i\) 的排列数。那么有:

\[f(n)=\sum_{i=0}^n \binom{n}{i} \cdot D(i) \]

\[D(n)=\sum_{i=0}^n (-1)^{n-i} \cdot \binom{n}{i}\cdot i! \]

\[=\sum_{i=0}^n (-1)^{n-i} \cdot \frac{n!}{(n-i)!} \]

\[=n!\sum_{i=0}^n\frac{(-1)^i}{i!} \]

后面的递推式可以通过这个式子化出来。

结论 7:

\[\sum_{n+m=N}\binom{n}{s}\cdot \binom{m}{t}=\binom{N+1}{s+t+1} \]

\(N+1\) 个球中取出 \(s+t+1\) 个球。相当于枚举第 \(s+1\) 个球的位置。

结论 8:

\[\large \sum_{k=0}^m \begin{pmatrix} m\\k \end{pmatrix} \begin{pmatrix} n\\k \end{pmatrix}=\begin{pmatrix} m+n\\m \end{pmatrix} \]

\[\large \sum_{k=0}^m \begin{pmatrix} m\\k \end{pmatrix} \begin{pmatrix} n\\k \end{pmatrix}\\ \large =\sum_{k=0}^n \begin{pmatrix} m\\m-k \end{pmatrix} \begin{pmatrix} n\\k \end{pmatrix} \]

\[\large =\begin{pmatrix} m+n\\m \end{pmatrix} \]

结论 9:

\[\binom{n+r+1}{n}=\sum_{i=0}^n \binom{i+r}{i} \]

其实和 结论 4. 有一个同一个名字 —— 上指标求和。

对于此结论,你可以用 结论 3. 对上指标较小的组合数进行拆分(这里的上指标指的反而是下面的部分)。

而对于 结论 4.,你需要的是对上指标较大的组合数进行拆分!

结论 10:

\[\binom{n}{k}=(-1)^k\cdot \binom{k-n-1}{k} \]

上指标反转求和。

结论 11:

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

\(\mathcal{Proof.}\)

结论 12:\(n\) 种不同的小球中选择 \(m\) 个,每种小球的数量为无限个,则方案数为 \(\binom{n+m-1}{m}\).

首先可以明确,一种合法方案一定是选择 \(i\) 种小球,再枚举每种小球的重复次数(这就是隔板法),这可以用一个柿子表示:

\[\text{Ans}=\sum_{i=1}^m \binom{n}{i}\cdot \binom{m-1}{i-1}=\sum_{i=1}^m \binom{n}{i}\cdot \binom{m-1}{m-i}=\binom{n+m-1}{m} \]

例题

例 1. 将长度为 \(n\) 的序列分成 \(m\) 段的方案数,允许段为空。或者,你会发现这和将 \(n\) 个相同的球放进 \(m\) 个不同的抽屉是等价的。

终于找到一个能说服我的 理解 了!

现在突然有了一种船新的理解!在 \(n+m-1\) 中选择 \(m-1\) 个分隔符,显然分出的序列可以为空。

例 2. \(\text{HDU - 5794 A Simple Chess}\)

可达点满足 \((x+y)\bmod 3=2\) 可以归纳证明。每次 \(x,y\) 坐标和都会增加 \(3\)

例 3. \(\text{arc110D - Binomial Coefficient is Fun}\)

如果确定了 \(b\),答案就是非常好求的。所以一种思路就是先用组合数算 \(b\),再来算答案。在 \(n+m\) 中选择 \(n\) 个分隔符,将整个序列分成 \(n+1\) 段。显然我们不要求分成的段有顺序,于是不妨令前 \(i,i\in[1,n]\) 段对应 \(a_i\) 选择的 \(b_i\)。最后一段相当于满足 \(\sum b_i\le m\) 的限制。答案就是 \(\text{C}(n+m,n+\sum a_i)\)。只要选出 \(n+\sum a_i\) 个数,因为 \(a_i\) 是固定的,方案也就固定了。

\(\text{Upd:}\) 可以利用 结论 7。推广一下可以得到 \(n\) 个组合数相乘的式子:\(\binom{\sum b_i+n-1}{\sum a_i+n-1}\)。接下来只用算 \(\sum_{\sum b_i\le m} \binom{\sum b_i+n-1}{\sum a_i+n-1}\)。利用 结论 4 可知答案为 \(\binom{m+n}{\sum a_i+n}\)

例 4. \(\text{abc171F - Strivore}\)

如果随便填会有重复的情况。考虑枚举原串的第一个字符的位置 \(i\),规定如果有相同字符,选择最后面的字符为原串字符。前 \(i-1\) 个位置为 \(26^{i-1}\),后面取 \(k+m-i\) 个位置放 \(m-1\) 个字符,为 \(\binom{k+m-i}{m-1}\)。剩余位置不能和左边最近的原串字符相同,但如果中间隔了另一个不同的原串字符就不影响,为 \(25^{k-i+1}\)

例 5. \(\text{[HNOI 2011] }\)卡农

当所选集合有顺序时更方便我们考虑问题(相当于在 \(m\) 个位置放集合),不妨先不管同种音乐的限制,最后将答案除以 \(m!\) 即可。

考虑题目的三个限制:

  • 所选集合不为空。
  • 两两集合不同。
  • 对于 \(i\in [1,n]\)\(i\) 在所选集合中出现次数和为偶数。

对于第一个限制,我们就只能选 \(2^n-1\) 种集合。设 \(dp_i\) 为在前 \(i\) 个位置放集合的合法方案数。有个很神奇的转化 —— 确定前 \(i-1\) 个集合,相当于确定第 \(i\) 个集合中 \(j\in [1,n]\) 出现次数的奇偶性。而 \(i\) 在某个集合只能出现 \(0/1\) 次,所以相当于确定了第 \(i\) 个集合。方案数为 \(\text{A}(2^n-1,i-1)\)

不过可能出现第 \(i\) 个集合为空集的情况。这种情况的方案数为 \(dp_{i-1}\)

还要排除第 \(i\) 个集合与前面的某 \(j\) 集合相同的情况。那么所有数在 \(i,j\) 集合的出现次数必定为偶数,所以剩余 \(i-2\) 个集合方案数为 \(dp_{i-2}\)。不过我们需要在前 \(i-1\) 个位置中给 \(j\) 找一个位置,有 \(i-1\) 的系数。\(i,j\) 集合的取值方案就是 \(2^n-1-(i-2)\)

例 6.\(n\) 个数里面取 \(i\) 个数异或的所有组合的和。\(n \le 1000,\ i\in[1,n]\)

对每一位进行计算。设某一位有 \(k\)\(0\),对于每个 \(i\),枚举从 \(k\)\(0\) 中选 \(t\) 个数,从 \(n-k\)\(1\) 中选 \(i-t\) 个数。方案数为 \(\binom{k}{t}\cdot \binom{n-k}{i-t}\),这些方案是否有贡献和 \(n-k\) 的奇偶性有关。

例 7. \(\text{agc043B - 123 Triangle}\)

手玩一下发现第二行就没有 \(3\) 了,所以将整体 \(-1\),这不影响相邻两项的差。

还有个性质:如果序列中有 \(1\),答案不可能为 \(2\)。因为 \(1\)\(0,2\) 都会变成 \(1\)。在这种情况下,我们就只用判断答案的奇偶性。

例 8. \(\text{Link with Balls}\)

首先可以发现第一个桶、\(2i,2i+1\) 的合并桶都可以取出任意个球,剩下第 \(2n\) 个桶能取 \([0,n]\) 之间的球。

于是可以枚举最后一个桶取了多少球,剩下球的方案可以用插板法解决。

数据范围太大?用 结论 4.

例 9. 怎么又双叒叕是括号序列?

题目大意:求有多少个长度为 \(n\) 的括号序列满足其所有子序列中最长合法括号 子序列 的长度恰好为 \(2k\). 多组数据。\(n,T\le 10^5\).

先放一张嫖过来的图:

自己做是不可能想到的,只有记住这个结论了罢……

首先一个 \(\rm trick\) 是遇到括号序列就转成 \(+1/-1\),然后 上图理解

这题有个结论是 "最长合法括号子序列长度为 \(n-s_n+2\cdot \min s_i\)"。首先需要再强调的一点是要求的是子序列,所以可以将多个合法括号子串拼在一起。对于具体证明,就是找出取到 \(\min s_i\) 的位置 \(p\)(多个是不影响的),其实位置 \(p\) 之前的段和之后的是很相似的。

为什么这么说呢?在 \(p\) 之前的段只浪费了红线部分,也即只有多余的右括号会造成浪费;而对于在 \(p\) 之后的段则只会浪费左括号。如果从 \(n\) 一端向 \(p\) 看,和从 \(0\)\(p\) 看其实是一样的!

那么之前段的浪费就是 \(\min s_i\)\(0\) 的距离,而之后段的浪费就是 \(\min s_i\)\(s_n\) 的距离。于是易得浪费的括号个数是 \(|\min s_i|+|s_n-\min s_i|\),用 \(n\) 减去这个值就证明了结论。

\(2k=n-s_n+2\cdot \min s_i\),我们现在可以知道 \(s_n\)\(\min s_i\) 之间的等式关系。不妨枚举 \(\min s_i=t\)(实际上二者都可以被枚举),接下来就又到了喜闻乐见的数数环节了!

其实这挺像卡特兰数的几何推导,所以我们也可以利用 "容斥" 与 "翻折" 这两个技巧。

答案是从 \((0,0)\) 走到 \((n,s_n)\)到达但不过 \(y=t\) 这条直线的方案数,就可以转化为 "从 \((0,0)\) 走到 \((n,s_n)\) 不经过 \(y=t-1\) 这条直线的方案数" 减去 "从 \((0,0)\) 走到 \((n,s_n)\) 不经过 \(y=t\) 这条直线的方案数"。

而对于 "不经过直线 \(y=t\)" 可以翻译成 "从 \((0,0)\) 出发到达 \((n,s_n)\) 的方案数" 减去 "从 \((0,0)\) 出发到达 \((n,s_n')\) 的方案数"。其中 \(s_n'\)\(s_n\) 相对 \(y=t\) 的对称点。

对于不经过 \(y=t-1\) 这条直线的方案数,令右括号个数为 \(x\),左括号为 \(y\),可以通过解一个方程组来得到 \(x,y\),这里就不再赘述:

\[\binom{n}{(n-s_n)/2}-\binom{n}{(n+s_n-2(t-1))}=\binom{n}{k-t}-\binom{n}{n-k+1} \]

最后得到答案是 \(\binom{n}{k}-\binom{n}{k-1}\),我们神奇地将 \(t\) 消掉啦!

最后还有 \(t\le s_n\) 的限制,可以解出 \(t\)\(n+1-2k\) 种取值,这道题就做完了。

posted on 2020-03-25 11:23  Oxide  阅读(169)  评论(0编辑  收藏  举报