排列组合
基本公式:
- 加法原理
完成一件事的方法有 n n n类,其中第 i i i类方法包括 a i a_i ai中不同的方法,且这些方法互不重合,则完成这件事总共的方法数为: a 1 + a 2 + a 3 + . . . . . . + a n a_1+a_2+a_3+......+a_n a1+a2+a3+......+an - 乘法原理
若完成一件事情需要 i i i个步骤,其中第 i i i个步骤有 a i a_i ai种不同的完成方法,且这些步骤互不干扰,则完成这件事总共的方法数为: a 1 ∗ a 2 ∗ a 3 ∗ . . . . . . ∗ a n a_1*a_2*a_3*......*a_n a1∗a2∗a3∗......∗an - 组合数
n n n个人中选出 m m m个人的方案数: C n m = n ! m ! ∗ ( n − m ) ! C_{n}^{m}=\frac{n!}{m!*(n-m)!} Cnm=m!∗(n−m)!n! - 排列数
n n n个人中选出 m m m个人站成一列纵队的方案数: P n m = n ! ( n − m ) ! P_{n}^{m}=\frac{n!}{(n-m)!} Pnm=(n−m)!n! - 圆排列
n n n个人中选出 m m m个人站成一圈的方案数: P n m m \frac{P_{n}^{m}}{m} mPnm
理解:每种圆排列对应 m m m种不同的排列 - 可重排列
n n n种元素,每种无限个,取出 m m m个元素排列的方案数: n m n^m nm
理解:乘法原理,每个位置 n n n种选择 - 可重组合
n n n种元素,每种无限个,取出 m m m个元素的方案数: C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m−1m−1
理解:相当于 m m m个物品分给 n n n个人,允许分到 0 0 0个的方案数,用隔板法即可。 - 多重集排列
设 S = { n 1 ∗ a 1 , n 2 ∗ a 2 , . . . . . . n k ∗ a k } S=\{n_1*a_1,n_2*a_2,......n_k*a_k\} S={n1∗a1,n2∗a2,......nk∗ak}
是由 n 1 n_1 n1个 a 1 a_1 a1, n 2 n_2 n2个 a 2 a_2 a2 . . . . . . ...... ...... n k n_k nk个 a n a_n an组成的多重集(包含重复元素)。 S S S的排列数个数为: n ! n 1 ! ∗ n 2 ! . . . . . . n k ! \frac{n!}{n_1!*n_2!......n_k!} n1!∗n2!......nk!n!
理解:由于同种元素本质相同,所以除以 n i ! n_i! ni!剔除重复。 - 多重集组合数(特殊情况)
定义同上,取出 r r r个元素 r ≤    n i r\leq\;n_i r≤ni组成一个多重集(不考虑顺序),产生的不同多重集的数量为: C k + r − 1 k − 1 C_{k+r-1}^{k-1} Ck+r−1k−1
理解:本质是求满足 ∑ i = 1 k x i = r \sum_{i=1}^k x_i=r ∑i=1kxi=r并且 x i ≤    n i x_i\leq\;n_i xi≤ni的方案数。由于 r ≤    n i r\leq\;n_i r≤ni,必定有 x i ≤    n i x_i\leq\;n_i xi≤ni,所以只用考虑 ∑ i = 1 k x i = r \sum_{i=1}^k x_i=r ∑i=1kxi=r这一条件。相当于 r r r个物品分给 k k k个人,允许分到0个,隔板法解决。 - 不相邻组合
从 1 1 1~ n n n种选出 m m m个不相邻数字的方案数: C n − m + 1 m C_{n-m+1}^{m} Cn−m+1m
理解:参见不相邻组合
鸽巢原理
基本形式:
- 简单形式
若有 n n n个鸽巢和 n + 1 n+1 n+1只鸽子,所有的鸽子都进入鸽巢,那么至少有一个巢中有 2 2 2只鸽子 ( n , k ≥ 0 ) (n,k≥0) (n,k≥0)。 - 加强形式
若有 n n n个鸽巢, q 1 + q 2 + q 3 + . . . q n − n + 1 q_1+q_2+q_3+...q_n-n+1 q1+q2+q3+...qn−n+1个鸽子,那么或者第一个巢里有 q 1 q_1 q1只鸽子,或者第二个巢里有 q 2 q_2 q2只鸽子 . . . . . . . ....... .......或者第 n n n个巢里有 q n q_n qn只鸽子,即这 n n n个条件至少满足一个。
理解:假设都为 q i − 1 q_i-1 qi−1,则最终有 ∑ i = 1 n x i = q 1 + q 2 + q 3 + . . . q n − n \sum_{i=1}^n x_i=q_1+q_2+q_3+...q_n-n ∑i=1nxi=q1+q2+q3+...qn−n个,但是多出的一个一定会分在其中一个里。
应用
- 给定
n
n
n个整数
a
1
,
a
2
,
a
3
,
.
.
.
.
.
.
a
n
a_1,a_2,a_3,......a_n
a1,a2,a3,......an,存在满足条件
1
≤
  
k
≤
  
l
≤
  
n
1\leq\;k\leq\;l\leq\;n
1≤k≤l≤n的整数
k
k
k和
l
l
l,使得
∑
i
=
l
k
a
i
\sum_{i=l}^ka_i
∑i=lkai能被
n
n
n整除。
理解:转化成前缀和相减,会发现有 n + 1 n+1 n+1种前缀,一定存在两个前缀模 n n n为 0 0 0。 -
R
a
m
s
e
y
Ramsey
Ramsey定理:在六个人中,要么存在三个人彼此互相认识,要么存在三个人彼此都不认识。
理解:设六个人为六个点,认识或不认识用两种不同颜色的线段代表,因为两人只有一种关系,所以任意一点一定会引出连向其他5点的五个线段,根据鸽巢定理,有2种关系,有 2 ∗ 2 + 1 = 5 2*2+1=5 2∗2+1=5条关系线,那么必定有一种关系拥有 3 3 3条关系线。
更多性质参见:浅谈鸽巢原理的证明和简单应用
容斥原理
基本公式:
更形象的理解如图
应用:
- 多重集组合数(一般情况)
定义与前面是一样的,区别在于:设 n = ∑ i = 1 k n i n=\sum_{i=1}^{k}n_i n=∑i=1kni,对于任意整数 r ≤    n r\leq\;n r≤n,从 S S S中取出 r r r个元素组成一个多重集(不考虑顺序),产生的不同多重集的数量: C k + r − 1 k − 1 − ∑ i = 1 k C n + r − n i − 2 k − 1 + ∑ 1 ≤    i < j ≤    k C n + r − n i − n j − 3 k − 1 − . . . . . . + ( − 1 ) k C k + r − ∑ i = 1 k n i − k − 1 k − 1 C_{k+r-1}^{k-1}-\sum_{i=1}^{k}C_{n+r-n_i-2}^{k-1}+\sum_{1\leq\;i<j \leq\;k}C_{n+r-n_i-n_j-3}^{k-1}-......+(-1)^kC_{k+r-\sum_{i=1}^kn_i-k-1}^{k-1} Ck+r−1k−1−i=1∑kCn+r−ni−2k−1+1≤i<j≤k∑Cn+r−ni−nj−3k−1−......+(−1)kCk+r−∑i=1kni−k−1k−1
证明:
不考虑 n i n_i ni的限制,那么总数就是在排列组合中提到的 C k + r − 1 k − 1 C_{k+r-1}^{k-1} Ck+r−1k−1
现在有了限制,我们考虑用总数减去不合法方案,即至少包含 n i + 1 n_i+1 ni+1个 a i a_i ai的多重集,然后用容斥即可(主要是太懒不想写了)。
更多应用参见:容斥原理详解