目录
基础知识点:
加法原理:
具有性质1的事件有a件,具有性质2的事件有b件,则有性质1或2的事件有\(a+b\)件。
乘法原理:
具有性质1的事件有a件,具有性质2的事件有b件,则有性质1和2的事件有\(a\times b\)件。
排列与组合:
组合意义
即一个公式的实际化的解释
排列公式
\[p_n^r=\frac{n!}{(n-r)!} \]
{从n个有标号中的数中取出r个,进行全排列}
证明:
选第一个数有n种选择,第二个数有n-1种选择...,以此类推,第r个数有(n-r+1)种选择,故\(p_n^r=n\times (n-1) \times (n-2)...\times (n-r+1)=\frac{n!}{(n-r)!}\)
得证
可重全排列
\[p=\frac{n!}{c_1!\times c_2! \times...\times c_m!}\]
{把n个有标号的数进行全排列,其中有\(c_1,c_2...c_m\)个数标号相同}
证明:
只考虑取出n个数进行全排列,先不考虑有重复,这时方案数为
\[n!\]
而此时,这\(c_i\)个数同时也会进行全排列,故重复\(ci!\)次,故得证。
组合公式
\[C_n^r=\frac{n!}{(n-r)!\times r!}\]
{从n个有标号的数中取出r个数来}
证明:
- 理解1
从n个数中间取出r个数来进行全排列,有
\[P_n^r=\frac{n!}{(n-r)!} \]
而此时因为全排列重复r次,故不进行全排列(除掉全排列方案数),即可得到组合公式
\[C_n^r=\frac{P_n^r}{r!}=\frac{n!}{(n-r)!\times r!}\]
- 理解2
考虑分子为n个数的全排列,而分母的解释为排列的过程,有r个元素重复和n-r个元素重复,而重复的元素去了重正好就是组合方案。
允许重复的组合
\(C_{n+r-1}^{r}\){从n个有标号元素中允许重复地选出r个}
证明:
1.全排列划分模型:
考虑每个元素可以重复选择,过于复杂,但是无论如何只要选出r个元素,故对r个元素下手,问题也就变成了这r个元素如何分成n种,于是转换成经典模型,将r个0和n-1个1进行全排列,而n-1个1正好将r个0分成n个部分,每个部分对应一种划分,所以与原问题一一对应。
故问题变为求r个0与n-1个1进行全排列方案数,不难由可重全排列知道,方案数为
\[\frac{(n+r-1)!}{r!(n-1)!}\]
又注意到分母两式之和为分子之和,有
\[\frac{(n+r-1)!}{r!(n-1)!}=C_{n+r-1}^{r}\]
得证
2.变标号
考虑只要证明\(c_{n+r-1}^{r}\)与从n个有标号数中允许重复的数一一对应即可。
所以不妨设n个数的标号从小到大\(1-n\),而设选出来的数为\(a_1,a_2,...,a_r\),因为可以重复,必然有
\(a_1\leq a_2\leq,...,\leq a_r\),
而要让其对应于\(c_{n+r-1}^{r}\),不妨对每个选出来的标号按一定顺序加上一些值,于是有
\[a_1< a_2+1< a_3+2 <,...,< a_r+r-1\]
此时各个选出来的数互不相同,对应了\(c_{n+r-1}^{r}\)的一种方案.
而为了证明一一对应,从\(c_{n+r-1}^{r}\)角度来看,设选出来的数
为\(b_1<b_2<b_3<...<b_r\),继续采取变标号的方法,于是有
\[b_1\leq b_2-1\leq b_3-2\leq...\leq b_r-r+1\]
于是两者一一对应,故得证。
圆周排列:
从n个有标号元素中取出r个元素进行圆周排列,方案数为:
\[Q_n^r=\frac{p_n^r}{r}\]
证明:
对于一个圆周排列的每一种方案,被排列重复了r次,故得证。
常用性质:
补集公式
\[C_n^r=C_n^{n-r}\]
证明:该情况对应于那些元素不选,故得证。- 递推公式
\[C_n^r=C_{n-1}^{r}+C_{n-1}^{r-1}\]
证明:对于一个元素考虑,可以选择必然不选和选两种状态,故划分了问题。\[C_n^r=C_n^{r-1}\times \frac{n-r+1}{r}\]
证明:拆式易证可得。
- 上标公式
\[C_n^0+C_n^1+...+C_n^n=\sum_{i=0}^{n}C_n^i=2^n\]
证明:该情况对应与一个元素要么选,要么不选,故得证。
\[C_n^0-C_n^1+...+(-1)^nC_n^n=\sum_{i=0}^{n}(-1)^iC_n^i=0\]
证明:(注:先看完下方二项式定理在来看)
\[0^n=(1-1)^n=\sum_{i=0}^{n}(-1)^iC_n^i\]
- 组合与平面直角坐标系从(0,0),只能往上走和往左走的,到(m,n)方案数的关系。
\[C_{n+m}^n\]
证明:往上走和往右走可以看做0,1,不难得知组成序列长度为n+m,
而可以看成是这n+m个空中选出n个空填上1或者0的方案数。
- 在平面直角坐标系上,从(0,0)出发,每次只能选择向上走和向右走,走到(n,m)(n<m),使走的点横坐标一定小于纵坐标的的方案数为:
\[C_{n+m-1}^{n}-C_{n+m-1}^{m}\]
转换问题,n<m即不触碰y=x这条线,固然我们不好表现所有方案,所以考虑补集,因为发现从(1,0)出发一定不满足条件,而从(1,0)出发的路径经过y=x对称后与从(0,1)出发的路径一一对应,于是合法方案数为
\[(0,1)\rightarrow(n,m)-(1,0)\rightarrow(n,m)=\]
\[C_{n+m-1}^{n}-C_{n+m-1}^{m}\]
- 下标公式
\[C_r^r+C_{r+1}^r+C_{r+2}^r+...+C_n^r=C_{n+1}^{r+1}\]
{单递增形式}
or
\[C_r^0+C_{r+1}^1+C_{r+2}^2+...+C_n^{n-r}=C_{n+1}^{r+1}\]
{双递增形式}
证明:
考虑要证明与之一一对应,先要理解右式组合意义,从n+1个数中选出r+1个,它与所有组合数的关系,在于少选了一个数,也就是有了一个数已经选择,它与\(C_r^r\)的关系,不难看出,是有少了n-r+1个数的选择。
于是不难得知,问题的划分在于有一个数已经选,于是设可选下标为\(a_1,a_2,...,a_{n+1}\),不妨先假设第一个数已经选了,自然就只有\(C_{n}^{r}\),而第二个数已经选了,那么第一个数就不能选了,所以方案为\(C_{n-1}^{r}\),以此类推,...,第\(n+1-r\)个数已经选了,后面的都不能选了,所以为\(C_r^r\),因此单递增形式得证,利用补集公式,双递增形式也得证。
二项式定理
\[(a+b)^n=\sum_{i=0}^{n}C_n^i\times a^i \times b^{n-i}\]
证明:与组合一一对应,故得证。
用途:拆分式子,证明组合关系。
Lucus定理
\(C_n^r\equiv C_{n/p}^{r/p}\times C_{n\%p}^{r\%p}(mod \ p)\){p是质数}
证明:
考虑组合数不好证明,于是想到二项式定理这一工具,而出来的数字里面存在余数,故考虑余数的定义,于是设
\[\left\{\begin{array}{c}r=k_1\times p+r_1\\n=k_2\times p+r_2\end{array}\right.\]
因为证明的右式中n在下方,于是设
\[\begin{array}{c}(x+1)^n\equiv(x+1)^{k_2\times p+r2}\equiv [{(x+1)^p}]^{k_2}\times(x+1)^{r_2}[a]\equiv\\(x^p+1)^{k_2}\times (x+1)^{r_2}\equiv\sum_{i=0}^{k_2}(C_{k_2}^i\times x^{pi})\sum_{j=0}^{r2}(C_{r2}^{j}\times x^j)\\(mod\ p) \end{array}\]
注释:
[a]注意到p是质数于是,我们联想费马小定理.
[b]
\[\begin{array}{c}(x+1)^p\equiv x+1(mod \ p)\\x^p\equiv x(mod\ p)\\ \Downarrow\\(x+1)^p\equiv x^p+1(mod\ p)\end{array}\]
接下来,我们回到\(r=k_1\times p+r_1\),注意到当且仅当\(i=k_1,j=r_1\),可以保证有次数\(x^{k_1\times p+r_1}\),而对于最右式,拆开也只有唯一一项有\(x^{k_1\times p+r_1}\),故有
\[C_n^r\equiv C_{n/p}^{r/p}\times C_{n\%p}^{r\%p}(mod \ p)\]
{p是质数}
Exlucus
当p不为质数时,它必然为合数,但是我们只能解决p为质数的问题,
所以考虑拆分p,不妨设:
\[p=p_1 \times p_2 \times ... p_m\]
注意到其中系数全为1,我们考虑分别用lucus求出它们的余数,
问题变成我们如何合并这些数,变为%p的余数,注意到\(p=p_1 \times p_2 \times ... p_m\)之间是互质的,而且要合并,
于是联想到中国剩余定理(crt),故把求出来的值作为已知数列出方程,求解即为答案
证明正确性:
\[\left\{\begin{array}{c}x=a_1(mod\ p_1)\\x=a_2(mod\ p_2)\\x=a_3(mod\ p_3)\\.\\.\\.\\x=a_n(mod\ p_n)\end{array}\right.\]
\[\left\{\begin{array}{c}x=a_{n+1}(mod\ p)\end{array}\right.\]
设有x,容易知道上面方程通解为\(x+k\times p\),而下面方程通解也如此,故解集相同,可以合并。
ExExlucus
有
\[p=p_1^{c_1} \times p_2^{c2} \times ... p_m^{c_m}\]
由其中两两互质考虑CRT合并,问题也就变成求出
\(C_n^r\%p_i^{c_i}\),而显然\(p_i^{c_i}\)没有再拆解的意义了,与是考虑拆解组合数。
\[C_n^r=\frac{n!}{(n-r)!r!} \]
现在问题变成快速求阶乘,问题在于分母式子可能不存在逆元,故不能
直接%了以后求,于是想是否能够把所有与\(p_i^{c_i}\)不互质的数先提出来,对于\(n!\),不难知道,只提出来一个数,总共有\(\frac{n}{p_i}\)
,而剩下的能做贡献的只有\([\frac{n}{p_i}]!\),对此进行递归出来即可。
接下来问题在与如何处理不是\(p_i\)的倍数的数,自然不能全部算,所以考虑问题是否有重复性,优先考虑循环节,显然发现数好像被它切成好几截,而每一截余数又相同,故对此进行处理出一部分,其他循环节直接调用结果即可,剩余的循环节部分,暴力预处理即可。
Catalan数列
给定n个0和n个1全排列,当其任意前缀中0的个数总多于1的个数,方案数为
\[\frac{C_{2n}^{n}}{n+1}\]
证明:
显然直接求一次满足所有条件方案数很难做,故考虑不成立的方案数,用总方案数减去即可,当其方案中不满足条件,总存在一个位置2p+1,使得它的前缀1的个数为p+1,0的个数为p,于是现在考虑寻找谁与其对应。
因为是0,1串,考虑将其2p+2后面取反,此时不难得知整个序列0的个数现在为n-1,1的个数为n+1,所以原排列的不成立方案对应新排列(即n-1个0和n+1个1进行全排列)。
对于新排列,因为1的个数多于0的个数,所以总存在一个位置2p+1,使得0的个数为p,1的个数为p+1,同样对2p+2位置后面取反,不难的得到0的个数为n-1个,1的个数n+1个,此时仍然不满足条件。
故两种排列一一对应,而新排列的方案数为
\[\frac{2n!}{(n-1)!\times (n+1)!}\]
要获得满足条件的方案数为
\[\begin{array}{c}\frac{2n!}{n!n!}-\frac{2n!}{(n-1)!\times (n+1)!}=(2n)!\times (\frac{1}{n!n!}-\frac{1}{(n-1)!(n+1)!})=(2n!)\frac{(n-1)!(n+1)!-n!n!}{n!n!(n-1)!(n+1)!}\\\\=(2n!)\frac{(n-1)!(n+1)-n!}{n!(n-1)!(n+1)!}=(2n!)\frac{(n+1)-n}{n!(n+1)!}=\frac{2n!}{n!(n+1)!}=\frac{2n!}{n!n!(n+1)}=\frac{C_{2n}^{n}}{n+1}\end{array}\]
故得证
Catalan数列的常见模型
- n个左括号与右括号合法排列的方案数
解释:
将左括号看做0,右括号看做1,无论在哪个位置1总比0多。
- 1,2,3,...,n的合法出栈序列方案数
解释:
因为只有n个数,无法凑出2n个数,难以解释,于是将入栈序列考虑进来,把出栈作为1,入栈作为0,0总比1多,故对应。
- n个节点的构成二叉树方案数
解释:显然只有n个不好解释,但注意到2,联想catalan,于是要创造各种树的序列,失败后,便不再考虑转换模型一一对应,可以考虑科学归纳法,对于n个节点的树的方案数,为了划分问题,我们钦定一个点作为根节点,这个点显然引出了两棵子树,不难得知,方案数的不同在与这两棵子树的大小与点边之间的关系,于是不难有
设\(f[n]\)表示n个节点的方案数,不难有:
\[f[n]=f[0]\times f[n-1]+f[1]\times f[n-2]+...+f[n-1]\times f[0]=\sum_{i=1}^{n}f[i]\times f[n-i]\]
而该数列为catalan数列,故得证。
这也告诉我们catalan的另外一种形式,因为你如果设
设\(f[n]\)表示长度为n的catalan数列的方案数,其实也可以同样利用树的划分思想,放一个长度2的catalan的数,左右接catalan数列即可。
4.在平面直角坐标系上,从(0,0)出发,每次只能选择向上走和向右走,走到(n,n),不穿过y=x直线的的方案数。
解释:
考虑转换模型,向上走和向右走即2种策略,可以考虑catalan,设0向上走,1向右走,显然要n个0和1才能走到目的地,而不能穿过y=x,自然要么0一定比1多,或者1一定比0多,故方案数得知。
Prefur 序列
定义:有标号的树所对应的序列
树变序:每次从叶结点(度数为1的点)中选出标号最小的,将其从树中删去,记录与其相邻的点的标号,这样按时间先后记录的标号,即prefur序列。
序变树:把P序列叫做prefur序列,A序列为{1,2,3...,n}(1~n的递增排列),从前到后删除P序列中的每一个元素,在A序列寻找未在P序列中出现的最小的元素删去,把删去的两个元素连边,直至P序列为空,连上A序列剩下的两个元素所得应的节点。
性质:(把序列长度记做n)
- prefur序列长度n-2
- 与一棵有标号的树一一对应。
- caley定理:有标号的树生成个数为\(n^{n-2}\)(即序列的可重排列个数)
- 度数体现:一个度数为d的点,在序列中出现的次数为d-1.
启发性:
对于非序列组合问题,我们不好探究,于是除了catalan数此路以外,我们可以寻找一种一一对应的特殊的生成方式,使之与一个序列一一对应,变成我们好研究的序列。
prefur序列特殊到选择叶结点标号最小的的相邻点,和删去的生成方式以便于序列记录的完整,再序变树时,因为删去的点必不在序列中出现,故要另找一个递增序列,寻找未出现的标号最小的点,不可不谓巧。
基础巩固
\[C_n^r=\_=\_=\_;\]
请写出可重全排列公式。
请写出catalan公式
请证明lucus定理。
把\(2^n\)用组合数表示。
请写出允许重复的组合的公式。
请写出二项式定理的公式。
请证明catalan数。
请举出catalan数的几个应用,并给予解释。
请写出圆周排列的公式。
在平面直角坐标系上,从(0,0)出发,每次只能选择向上走和向右走,走到(n,m)(n<m),使走的点横坐标一定小于纵坐标的的方案数。
7位科学工作者从事一项机密的技术研究,他们的实验室装有电子锁,每位参加该项工作的人都有一把打开电子锁的钥匙。为安全起见,必须有4位到场方可打开实验室的门。试问该电子锁必须具备多少特征?每位科学工作者的钥匙应具有多少这些特征?
套路小结
排列与组合
递推:
- 按照性质设状态
- 根据问题划分与策略以及补集转移
- 有有关标号状态,限制标号范围转移。
组合:
常见模型:
- 小球放盒子
- 从(0,0)到(n,m)上右操作方案。
- 可重组合
- 插空问题
5.递增序列,不降序列
小结
- 通常可以转换成其他模型
- 用于通项公式
- 大部分情况应为有标号元素放入无标号盒子
排列:
常见模型:
- 可重排列
- 分组问题
- 插空问题
小结:
- 通常可以转换成其他模型
- 重结果,忽略过程,抓住影响结果关键(因为其后效性过于严重)
- 用于通项公式的推出
圆周排列
常见模型:
- 围桌吃饭
小结
- 用于推通项公式
- 通常不好求,故拆环成链
一些常见拆环成链的办法:
- 再补一截(元素较为固定,确定,较少)
- 拆环分问(元素不确定,但没有排列限制,用于划分方案数的问题)
移链接首 or called floyd环(元素不确定,而且有排列限制,但是限制较小)
错排模型归纳
常见模型:
- 矩阵错排
- 排列错排(递推式\(f[i]=(i-1)\times (f[i-1]+f[i-2])\))
小结:
错排模型标志即一行一列最多只能放一个棋子,或者排列中元素不能放到有且仅有的某个位置。
错排自由定理:在错排问题中,行列之间互不影响,可以任意交换。
- 解决错排两个常用工具
- 递推(简单好些)
- 通项(速度快)
- 对于错排的变式,需要抓住错排的对象,如[CQOI2011]放棋子
对象是颜色。
catalan数模型归纳
基本模型:
- 栈
- 括号
- (0,0)到(n,n)不穿过y=x
- 二叉树方案数。
基本证明办法:
- 定义
- 递推(重在寻找划分)
- 转换模型
一些技巧
- 序列保证递增尽量构造递增。
- 需要什么尽可能保证什么
树的组合计数问题归纳
二叉树
二叉树压维模型
常用状态:节点数,节点编号
常用转移:
- 递推方程左右子树划分
- catalan数
- 拆分
树
- 有标号的树考虑prefur序列