【1】组合数学基础
我们用 \(\dbinom{n}{m}\) 代表组合数,其含义为从 \(n\) 个物体中选出 \(m\) 个的方案数,也可以记为 \(C_{n}^m\)。
记 \(n\) 的阶乘为 \(\prod\limits_{i=1}^ni\),记为 \(n!\)。
记 \(n\) 的 \(m\) 次下降幂为 \(\prod\limits_{i=0}^{m-1}(n-i)=\frac{n!}{(n-m)!}\),记为 \(n^{\underline{m}}\)。
1.1 基本恒等式
从 \(n\) 个物品中选出 \(m\) 个,第 \(i\) 次有 \(n-i+1\) 种选法,因此总共有 \(n^{\underline{m}}\) 中选法,但是因为取出的顺序被多算了,所以要除掉 \(m!\),因此我们可以得到组合数的 **定义式 **:
\[\dbinom{n}{m}=\dfrac{n^{\underline{m}}}{m!}=\dfrac{n!}{m!(n-m)!} \]预处理阶乘和阶乘的逆元即可做到 \(\Theta(n)-\Theta(1)\),不过因为需要逆元存在因此通常要求模数是大质数。
这一公式也说明了二项式系数的对称性,即 \(\dbinom{n}{m}=\dbinom{n}{n-m}\)。
同时当 \(n\) 很大,\(m\) 不大时,我们可以 \(\Theta(m)\) 求出 \(\dbinom{n}{m}\)。
从另一种角度考虑,我们分第 \(n\) 个物品选或者不选,可以得到 加法公式:
\[\dbinom{n}{m}=\dbinom{n-1}{m-1}+\dbinom{n-1}{m} \]通过这个式子我们可以做到 \(\Theta(n^2)-\Theta(1)\),不对模数有要求。
我们来看加法公式的一些重要应用:
上指标求和
\[\sum\limits_{i=0}^n\dbinom{i}{m}=\dbinom{n+1}{m+1} \]证明:
\(\binom{n+1}{m+1}=\binom{n}{m}+\binom{n}{m+1}=\binom{n}{m}+\binom{n-1}{m}+\binom{n-1}{m+1}=……\)
不断对最后一项展开即可。
平行求和
\[\sum\limits_{i=0}^n\dbinom{m+i}{i}=\dbinom{n+m+1}{n} \]只需要利用对称性,然后通过上指标求和即可。
给出 \(l_1,r_1,l_2,r_2\),请求出下式的值:
\[\sum\limits_{i=l_1}^{r_1}\sum\limits_{j=l_2}^{r_2}\dbinom{i+j}{i} \]
应用两次上指标求和即可。
另一个重要的式子是 吸收恒等式:
\[\dbinom{n}{m}=\dfrac{n}{m}\dbinom{n-1}{m-1} \]证明很简单,按照阶乘的定义拆开即可。
移项可以得到一个更加常用的形式:
\[m\dbinom{n}{m}=n\dbinom{n-1}{m-1} \]我们来看这种公式有什么应用:
求下式的值:
\[\sum\limits_{i=0}^ni\dbinom{m-i-1}{m-n-1} \]
我们用 \(m-(m-i)\) 替换 \(i\),然后得到:
\[\sum\limits_{i=0}^n(m-(m-i))\dbinom{m-i-1}{m-n-1}=\sum\limits_{i=0}^nm\dbinom{m-i-1}{m-n-1}-\sum\limits_{i=0}^n(m-i)\dbinom{m-i-1}{m-n-1} \]然后对于后式使用吸收恒等式,变成
\[\sum\limits_{i=0}^nm\dbinom{m-i-1}{m-n-1}-\sum\limits_{i=0}^n(m-n)\dbinom{m-i}{m-n}=m\sum\limits_{i=0}^n\dbinom{m-i-1}{m-n-1}-(m-n)\sum\limits_{i=0}^n\dbinom{m-i}{m-n} \]此时变成上指标求和的形式,化简完可以得到:
\(\dfrac{n}{m-n+1}\dbinom{m}{m-n}\)
多重集组合数
\[\dbinom{n}{x_1}\dbinom{n-x_1}{x_2}\cdots \dbinom{n-x_1-x_2……-x_{k-1}}{x_k}=\dfrac{n!}{x_1!x_2!\cdots x_k!} \]最后我们来看两个最为重要的恒等式:
二项式定理
\[(a+b)^n=\sum\limits_{i=0}^n\dbinom{n}{i}a^ib^{n-i} \]证明只需要考虑从每个单项式里选择 \(a\) 或者 \(b\) 就行。
带入一些 \(a,b\) 的特例可以得到如下三个式子:
\[0^n=\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^i \]
组合数行内交错和。
\[2^n=\sum\limits_{i=0}^n\dbinom{n}{i} \]
子集个数。
\[3^n=\sum\limits_{i=0}^n\dbinom{n}{i}2^i \]
子集枚举的复杂度。
范德蒙德恒等式
\[\sum\limits_{i=0}^n\dbinom{n}{i}\dbinom{m}{k-i}=\dbinom{n+m}{k} \]这里的证明则需要考虑另一种常见的方式,组合意义。
这些就是就是常见的组合恒等式。
例一
\(q\) 次询问,每次给出 \(n,l,r\),求出下式的值:
\[\sum\limits_{i=l}^r\dbinom{n}{i} \]\(1\leq n,l,r,q\leq 10^5\)。
1.2 常见的组合意义
- 把 \(n\) 个相同的小球分到 \(m\) 个不同的盒子里,且所有盒子非空。
插板法的经典应用,可以理解成在 \(n-1\) 个空隙中插入 \(m-1\) 个隔板,所以方案数为 \(\binom{n-1}{m-1}\)。
- 把 \(n\) 个相同的小球分到 \(m\) 个不同的盒子里,且盒子可以为空。
等价于右面方程的非负整数解的数量 \(x_1+x_2+\cdots+x_m=n\)。
令 \(y_i=x_i+1\),那么 \(y_1+y_2+\cdots y_m=n+m\),因为 \(x,y\) 一一对应,所以 \(x\) 的数量就是 \(y\) 的数量,而后者显然等于 \(\dbinom{n+m-1}{m-1}\)。
例三 [ABC240G] Teleporting Takahashi
例四 CF1548C The Three Little Pigs
例五 P4370 [Code+#4] 组合数问题2
练习一 P8367 [LNOI2022] 盒
1.3 Lucas 定理
对于质数 \(p\),有:
\[\dbinom{n}{m}\equiv \dbinom{n/p}{m/p}\dbinom{n\bmod p}{m\bmod p}\pmod p \]预处理 \(n,m<p\) 时的阶乘和逆元,可以在 \(\Theta(p)-\Theta(\log_2(n))\) 内求组合数。
例五 [SHOI2015] 超能粒子炮·改
设 \(F(n,k)=\sum\limits_{i=0}^k\dbinom{n}{i}\)
\(F(n,k)=\sum\limits_{i=0}^k\dbinom{n\bmod p}{i\bmod p}\dbinom{n/p}{i/p}\)
\(=\sum\limits_{i=0}^{p-1}\dbinom{n\bmod p}{i}\sum\limits_{j=0}^{k/p-1}\dbinom{n/p}{j}+\sum\limits_{i=0}^{k\bmod p}\dbinom{n\bmod p}{i}\dbinom{n/p}{k/p}\)
\(=F(n\bmod p,p-1)F(n/p,k/p-1)+F(n\bmod p,k\bmod p)\dbinom{n/p}{k/p}\)
\(\Theta(p^2)\) 预处理,组合数直接 Lucas 求,复杂度 \(\Theta(p^2+T\log_p^2n)\)。
这个形式更加通俗的解释是:把 \(n,m\) 写成 \(p\) 进制,那么组合数就是每一位的组合数的乘积。
而这个解释通常可以把 Lucas 定理和 数位DP 联系在一起。
例六 [清华集训2016] 组合数问题
因为答案等于每一位下 \(\dbinom{i_k}{j_k}\) 的乘积,所以只要存在有一位 \(k\),满足 \(i_k<j_k\),那么 \(\dbinom{i}{j}\equiv 0\pmod p\)。
考虑数位 DP,设 \(f_{k,0/1,0/1,0/1,0/1}\) 表示当前到第 \(k\) 位,是否出现 \(i_k<j_k\) 的位,\(i_k,j_k\) 是否卡上界,\(i\) 是否等于 \(j\)。
而当 \(p=2\) 时,我们可以得到一个常用推论:
- 对于 \(n,m,[n\& m=m]\equiv \dbinom{n}{m}\pmod p\)。
例七 [CTSC2017] 吉夫特
题给条件显然等于 \(a_{b_{i+1}}\) 是 \(a_{b_i}\) 的子集,设 \(f_{i}\) 表示结尾的 \(a=i\) 的方案数,每次枚举子集转移即可。
例八 CF1770F Koxia and Sequence
练习二 [AGC043B] 123 Triangle
练习三 P7976 「Stoi2033」园游会
1.4 Kummer 定理
对于 \(n,m,p\),$$\dbinom{n+m}{n}$$ 中 \(p\) 的个数等于 \(n+m\) 在 \(p\) 进制下的进位次数。
这个定理同样和数位DP关系密切。
例九 CF582D Number of Binominal Coefficients
标签:dbinom,limits,bmod,组合,基础,数学,Theta,sum From: https://www.cnblogs.com/jesoyizexry/p/18378000根据 Kummer 定理,我们只需要保证进位次数 \(\geq \alpha\) 即可。
数位DP,设 \(f_{i,j,0/1,0/1,0/1}\) 表示当前第 \(i\) 位,总进位次数为 \(j\) ,是否卡上界,以及是否向当前位进位。
复杂度 \(\Theta(\log_p^2A)\)。