组合数学学习笔记

定义

\[C_n^m=\dbinom{n}{m}=\dfrac{n!}{m!(n-m)!} \]

公式

\[\dbinom{n}{k}=\dbinom{n-1}{k}+\dbinom{n-1}{k-1} \]

\[\sum^n_{i=0}\dbinom{n}{i}=2^n \]

\[\dbinom{n}{m}\dbinom{m}{k}=\dbinom{n}{k}\dbinom{n-k}{m-k} \]

组合数求法

  • 当范围较小时,使用加法原理 \(O(n^2)\) 求组合数(杨辉三角)

  • 当范围较大时用定义式,对大质数 \(p\) 取模时 \(O(n)\) 预处理阶乘与阶乘逆元

    int fac[maxn], inv[maxn], invfac[maxn];
    fac[0] = inv[1] = invfac[0] = 1;
    rep(i, 2, n) inv[i] = (p - p / i) * inv[p % i] % p;
    rep(i, 1, n) fac[i] = fac[i - 1] * i % p;
    rep(i, 1, n) invfac[i] = inv[i] * invfac[i - 1] % p;
    
  • 范围更大无法处理阶乘时可以使用 Lucas 定理,时间复杂度 \(O(\log_pn)\)

Lucas 定理

\[\dbinom{n}{m}\equiv\dbinom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\times\dbinom{n\bmod p}{m\bmod p} \pmod{p} \]

ll fac[maxn], invfac[maxn], inv[maxn];
ll lucas(ll x, ll y) {
    if(x < y) return 0;
    if(x < p) return fac[x] * invfac[y] * invfac[x - y] % p;
    return lucas(x / p, y / p) * lucas(x % p, y % p) % p;
}

球与盒子模型

1) 球相同 盒不同 无空盒

隔板法,相当于在 \(n-1\) 个位置插 \(m-1\) 个隔板,答案为 \(\dbinom{n-1}{m-1}\)

2) 球相同 盒不同 有空盒

加入 \(m\) 个“虚球”,接下来同无空盒,最终答案为 \(\dbinom{n+m-1}{m-1}\)

3) 球不同 盒相同 无空盒

第二类斯特林数。

\(f_{i,j}\)\(i\) 个小球放在 \(j\) 个盒子里且每个盒子不空的方案数,则 \(f_{i,1} = f_{i,i} = 1\),转移为 \(f_{i,j}=j\times f_{i-1,j}+f_{i-1, j - 1}\)

int f[15][15];//表示n个小球放进m个盒子里且每个盒子不空的方法数
rep(i, 1, n) f[i][1] = 1, f[i][i] = 1;
   rep(i, 1, n) rep(j, 2, m) f[i][j] = f[i - 1][j] * j + f[i - 1][j - 1];

4) 球不同 盒相同 有空盒

同无空盒,最后统计答案时枚举使用了几个盒子即可

5) 球不同 盒不同 无空盒

同 3),在统计答案时乘上 \(m\) 的全排列数即可。

6) 球不同 盒不同 有空盒

基本同 4),统计答案为 \(\sum_{i=1}^mf_{n,i}\times A_m^i\)

7) 球相同 盒相同 无空盒

基本同 8)

8) 球相同 盒相同 有空盒

\(f_{i,j}\)\(i\) 个小球放在 \(j\) 个盒子里的方案数,则 \(f_{i,j}=f_{i-1, j-1} + f_{i-j,j}\)。(第 \(j\) 个盒子放不放第 \(i\) 个球的两种情况)

答案为 \(\sum_{i=1}^mf_{n,i}\)

例题

P1595 信封问题

错排问题裸题。

\(D_n\) 表示 \(n\) 个元素的错排个数,我们来分析一下递推过程:

假设现在放了 \(n-1\) 个元素,第 \(n\) 个元素假设放在了 \(k\) 的位置,则 \(k\) 号元素有如下两种选择:

  1. 放在位置 \(n\) 上,这样剩下的问题变成了 \(D_{n-2}\)
  2. 不放在位置 \(n\) 上,这样剩下的问题变成了 \(D_{n-1}\)

再考虑到 \(k\)\(n-1\) 种取值,则 \(D_n=(n-1)\times(D_{n-1}+D_{n-2})\)

P4071 [SDOI2016]排列计数

\(n-m\) 个元素的错排问题,再乘上 \(\dbinom{n}{m}\) 即可

posted @ 2022-09-28 02:18  8ovehat1r  阅读(58)  评论(0)    收藏  举报