组合数学
排列数
\(A^m_n=n(n-1)(n-2) \cdot\ \cdot\ \cdot(n-m+1) =\frac{n!}{(n-m)!}\)
组合数
\(C^m_n=C^m_{n-1}+C^{m-1}_{n-1}\)
\(C^m_n=C^{n-m}_{n}\)
\(C^m_n=\frac{n}{m}×C^{m-1}_{n-1}\)
\(C^m_k×C^k_n=C^m_n×C^{n-k}_{n-m}(n-k<n-m)\)
\(\displaystyle\sum_{i=1}^n C^i_n = 2^n\)
\(\displaystyle\sum_{i=0}^n (-1)^i×C^i_n=0\)
\((a+b)^n = \displaystyle\sum_{i=0}^n C^i_na^{n-i}b^i\)(二项式定理)
\(C^m_n=\frac{A^m_n}{m!}=\frac{n!}{m!(n-m)!}=fac_n×invf_m×invf_{n-m}\)
阶乘预处理,逆元用费马小定理计算
\(Lucas\)定理
\(C^m_n=C^{m\ mod\ p}_{n\ mod\ p}×C^{m/p}_{n/p}\)
其中\(p\)为质数
\(code :\)
ll C(ll n,ll m)
{
return n<m?0:((f[n]*qp(f[m],mod-2)%mod)*qp(f[n-m],mod-2))%mod;
}
ll lucas(ll n,ll m)
{
return m?(C(n%mod,m%mod)*lucas(n/mod,m/mod))%mod:1;
}
错排
\(D_n=(n-1)(D_{n-1}+D_{n-2})\)
\(Catalan\)数
\(1, 1, 2, 5, 14, 42, 132, 429, 1430......\)
\(f(n)=\sum\limits_{i=0}^{n-1}f(i)f(n-1-i)=C_{2n}^n - C_{2n}^{n + 1} = \frac{C_{2n}^n}{n + 1} = \frac{C_{2n}^{n + 1}}{n}\)
\(n \times n\)⽹格,只能向上向右⾛,不能⾛到对⾓线上⽅,从\((0,0)\)⾛到\((n,n)\)的
⽅案数
\(n\)个元素的进出栈序列种类数
\(2n\)⻓度的正确匹配的括号序列数
\(n\)个节点的⼆叉树数⽬
\(n+1\)条边的凸多边形三⾓剖分的数⽬
\(Stirling\)数
第⼀类斯特林数\(s(n,m)\):\(n\)个不同的物体,分成\(m\)个非空循环排列(圆排列)的⽅案数
\(s(n,m)=(n-1) \times s(n-1,m) + s(n-1,m-1)\)
第⼆类斯特林数\(S(n,m)\):\(n\)个不同的物体,分成\(m\)份的⽅案数,每份没有编号
\(S(n,m)=m \times S(n-1,m)+S(n-1,m-1)\)