信息竞赛基础数论相关公式、推导、模型小杂烩

基础的排列组合

排列数:\(A_n^m=\frac{n!}{(n-m)!}\)
组合数:\(C_n^m=\frac{n!}{m!(n-m)!}\)

组合数相关的其他公式

组合数相关的所有公式基本都能通过杨辉三角推得

\(C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m}\)
\(C_n^m=C_n^{n-m}\)

卡特兰数的定义

卡特兰数是一个序列的方案数:一个序列中有\(n\)个字符\(A\)\(n\)个字符\(B\),在任何位置这个序列的\(A\)的数量都必须得大于这个序列的\(B\)的数量。

卡特兰数的简单运用

卡特兰数是一个基础模型,它可以运用到很多很多题目上,以下是它的几个基础运用:

1.进出栈序列

2.括号匹配(左括号是\(A\),右括号是\(B\)

3.二叉树计数(n个节点能够构成多少不同的满二叉树)

4.路径计数(在n*n的方格中,从左下角走到右上角,不经过对角线,一共有多少种方式)

如何判断一个问题能够使用卡特兰数

一个问题能使卡特兰数,它必须满足以下两个条件:

1.可以拆分成两个完全相同的独立子问题:对于规模为\(n\)的问题,总能找到一个分界点,将其分成一个规模分别为\(i\)\(n-1-i\)的子问题,且总方案数等于\(f(i)*f(n-i-1)\)对所有可能分界点的累加

(比如说,括号序列中分割点就是与左括号匹配的第一个右括号,进出栈序列就是最后一个出栈的元素,二叉树计数就是根节点)

2.满足“前缀约束”:在问题演进的任意一个前缀阶段,一种状态的数量始终不能少于另一种状态的数量。

卡特兰数的常用公式

1.递推公式

\[H_n=\sum_{i=0}^{n-1}{H_i}\cdot{H_{n-1-i}} \]

你应该在上文见过它的一部分:判断一个问题是否能够使用卡特兰数其实是可以和卡特兰数的公式相联系的。

这个公式可以用二叉树去理解:二叉树的形态=左子节点个数*右子节点个数=\(i\)(左子节点个数)\(*(Z-i-1)\)(总节点个数-左子结点个数-根节点根数(也就是1))

2.组合数通项公式1

\[H_n=\binom{2n}{n}-\binom{2n}{n-1} \]

这个公式的推理似乎也不是很难,我们可以使用一点点容斥思想,反正容斥的公式后面也会讲。我们先把所有有可能的\(AB\)序列排列全部算出来,然后把那些不满足条件的给减掉。

所有可能的序列:\(\binom{2n}{n}\)(从\(2n\)个中选出\(n\)个来放\(A\)
接下来是不合法的情况:假设有一个不合法的序列,那么一定有第一个位置使得\(B\)的数量>\(A\),我们此时把这个位置及其前面的字符全部反转使得\(A\)变成\(B\)\(B\)变成\(A\),就会发现这个字符串是一个有\(n+1\)\(B\)\(n\)\(A\)的字符串。
所以它们的方案是:\(\binom{2n}{n-1}\)

3.组合数通项公式3

\[H_n=\frac{1}{n+1}\binom{2n}{n} \]

这个公式是由组合数通项公式1推导的,公式很难打,这里就不打了。

容斥公式

容斥本质上就是先把所有的情况算出来然后再加加减减最后拼出正确答案(就是先容后斥)

两个集合:$$|A\cup B|=|A|+|B|-|A\cap B|$$

三个集合:$$|A\cup B\cup C|=|A|+|B|+|C|-|A\cup B|-|A\cup C|-|B\cup C|+|A\cup B\cup C|$$

公式完全体:$$\left| \bigcup_{i=1}^n A_i \right| = \sum_{i=1}^n |A_i| - \sum_{1 \leq i < j \leq n} |A_i \cap A_j| + \sum_{1 \leq i < j < k \leq n} |A_i \cap A_j \cap A_k| - \cdots + (-1)^{n-1} |A_1 \cap A_2 \cap \cdots \cap A_n|$$

插板法

插板法的最简单形式其实就是小球和盒子的游戏

小球相同,盒子不同

这考察的是插板法,分为两种情况

允许盒子空

\(n\)个球排成一排,将\(m\)个板子插入它们的空隙以将它们分开。由于盒子可以空,也就是代表板子和板子可以放在一起。最终的结果就是:\(C(n+m-1,m-1)\)

不允许盒子空

\(n\)个球排成一排,将\(m\)个板子插入它们的空隙以将它们分开。由于盒子不能空,所以我们只有\(n-1\)个空隙可以选择。最终的结果就是:\(C(n-1,m-1)\)

小球不同,盒子不同

允许盒子空

这是一个非常简单的情况:直接枚举每个小球放在哪个盒子里就好。最终的结果就是:\(m^n\)

其他的不写了。还没学喵。

posted @ 2026-07-20 17:24  Baltic  阅读(4)  评论(0)    收藏  举报