定义
排列数
$$A(n,m) = A_n^m = \frac{n!}{(n-m)!}$$
组合数定义
$$C(n,m) = C_n^m = \left(\begin{smallmatrix}n\\m\end{smallmatrix}\right) = \frac{n!}{m!(n-m)!}$$
(注意组合数记法中,$\left(\begin{smallmatrix}n\\m\end{smallmatrix}\right)$ 是上 $n$ 下 $m$,$C_n^m$ 是上 $m$ 下 $n$)
组合数的递推公式
$$C_n^m = C_{n-1}^m + C_{n-1}^{m-1}$$
求法
最原始的求法
1 | int comb(int n, int m) |
递推
$$C_n^m = C_{n-1}^m + C_{n-1}^{m-1}$$
仅能用于预处理小范围的组合数。
1 | ll C[maxn][maxn] = 0; |
预处理阶乘、逆元,用公式算
$$C(n,m) = C_n^m = \frac{n!}{m!(n-m)!}$$
1 | ll fac[maxn]; |
Lucas定理
$$C^{ap+b}_{cp+d} \equiv C^{a}_{c} \cdot C^{b}_{d} (mod\space p)$$
或
$$C^{m}_{n} \equiv C^{m/p}_{n/p} \cdot C^{m\%p}_{n\%p} (mod\space p)$$
推导:费马小定理
Catlan 数
Catlan
N 球放 M 盒问题
见链接
Stirling 数
LGV 定理 ——2019.7.23
CodeForces 348D
两只乌龟走路,要求不能相交。
由 LGV 定理可得,如果起点集合为 $\{a_1,a_2,a_3,…,a_n\}$,终点集合为 $\{b_1,b_2,b_3,…,b_n\}$,则要求他们走路不相交的路径对 pair
总数有:
其中,$e(a,b)$ 表示从点 $a$ 到 点 $b$ 的边权(在这里即指可走路径数)。
CodeForces 上这道题退化到只有两个起点即 $(1,2),(2,1)$ 和两个终点即 $(m-1,n),(n,,m-1)$,按照公式算一下路径即可。
\begin{equation}
ans =
\left |
\begin{matrix}
e(1,2) \to e(n-1,m) & e(1,2) \to e(m-1,n) \\
e(2,1) \to e(n-1,m) & e(2,1) \to e(m-1,n)
\end{matrix}
\right |
\end{equation}