组合数学入门

写在前面

感觉组合数学是OI (高中数学)中比较难啃的一部分
还是得写点什么来总结一下
组合数的有关性质这里就不赘述了,高中数学里有
水平不高,只能写一点个人的理解

小球与盒子

n 个球放入m 个盒子
这个应该是组合数学最经典的题目了

球相同,盒不相同
  • 不允许空盒

    经典的插板法,n 个小球有n-1 个空隙,插入m-1 块板,分成m 个集合

  • 允许空盒

    增加m 个球分给每个盒子,分好后从每个盒子中取出一个

球不相同,盒相同
  • 不允许空盒

    S 为第二类斯特林数

    递推公式

    对于第n 个球
    它可以放入前面k 个盒子中,由于球不相同,可以产生k 种方案
    也可以自己放入一个新的盒子中
    易证其正确性

    边界条件

  • 允许空盒

    可以有个空盒

球不相同,盒不相同
  • 允许空盒

    放入每个球时均有m 种方案

  • 不允许空盒

    盒子不同,需要考虑顺序

球相同,盒相同
  • 不允许空盒
    不会生成函数,只能用DP
    为前i 个球,放入j 个盒子的方案数

    • 若方案中有若干个盒子只有一个球,挑出其中一个盒子继续求解,方案数为
    • 若方案中不存在某个盒子只有一个球,将每个盒子均取出一个球之后继续求解,方案数为

    答案为

    初始化

  • 允许空盒

    相似的套路,增加m 个球分给每个盒子,分好后从每个盒子中取出一个

第一类斯特林数

补充一下第一类斯特林数

定义
n 个不同元素构成m 个圆排列的方案数

递推公式

对于第n 个球
它可以放入前面k 个圆排列中,共有n-1 个不同的位置,也可以自己放入一个新的盒子中

错位排列

定义
每个数都不在自己位置上的方案数

由于通项公式计算计算比较烦琐,且不易取模,这里仅讨论递推公式
递推公式

将新加入的元素与每个中的每个元素交换,可生成个合法排列
这样少考虑了一种情况
例如,元素1 在自己位置,元素2-(i-1) 均不在自己位置,这时1i 进行交换也可生成合法排列
每个元素均有可能在自己的位置,因此共有种方案
我是在一节语文课上才想通的

重复排列

k 个元素,每个元素出现次,
易得方案数

重复组合

k 个不同的元素,每种元素选择的个数没有限制,选出n
问题等价于选n 次,每次可以选k 种球,且不分先后
等价于将n 次选择机会分给k 种球,机会相同,球不同
等价于将n 个相同的球放入k 个不同的盒子,且可以为空
方案数为

Catlan数

定义有多种,这里讲其中一种
借用一下神犇wuyiqi 的图
Catlan

从左下角到右上角,且不穿过对角线的方案数就是Catlan数

任何一种非法方案均与绿线有交点,例如红线
将其按绿线做对称,例如红线与蓝线

可以发现

  • 终点均为
  • 每一种非法方案对应一种的方案

所以总方案数为

再补充两个Catlan数的递推公式

另外,在上述模型中比较容易求出一个合法前缀的方案数

先写这一些,其它的等熟练了再补充(・ω´・ )