【1】组合数学基础

【1】组合数学基础#

我们用 (nm) 代表组合数,其含义为从 n 个物体中选出 m 个的方案数,也可以记为 Cnm

n 的阶乘i=1ni,记为 n!

nm 次下降幂i=0m1(ni)=n!(nm)!,记为 nm_

1.1 基本恒等式#

n 个物品中选出 m 个,第 i 次有 ni+1 种选法,因此总共有 nm_ 中选法,但是因为取出的顺序被多算了,所以要除掉 m!,因此我们可以得到组合数的 **定义式 **:

(nm)=nm_m!=n!m!(nm)!

预处理阶乘和阶乘的逆元即可做到 Θ(n)Θ(1),不过因为需要逆元存在因此通常要求模数是大质数。

这一公式也说明了二项式系数的对称性,即 (nm)=(nnm)

同时当 n 很大,m 不大时,我们可以 Θ(m) 求出 (nm)

从另一种角度考虑,我们分第 n 个物品选或者不选,可以得到 加法公式

(nm)=(n1m1)+(n1m)

通过这个式子我们可以做到 Θ(n2)Θ(1),不对模数有要求。

我们来看加法公式的一些重要应用:

上指标求和#

i=0n(im)=(n+1m+1)

证明:

(n+1m+1)=(nm)+(nm+1)=(nm)+(n1m)+(n1m+1)=#

不断对最后一项展开即可。

平行求和#

i=0n(m+ii)=(n+m+1n)

只需要利用对称性,然后通过上指标求和即可。

给出 l1,r1,l2,r2,请求出下式的值:

i=l1r1j=l2r2(i+ji)

应用两次上指标求和即可。

另一个重要的式子是 吸收恒等式

(nm)=nm(n1m1)

证明很简单,按照阶乘的定义拆开即可。

移项可以得到一个更加常用的形式:

m(nm)=n(n1m1)

我们来看这种公式有什么应用:

求下式的值:

i=0ni(mi1mn1)

我们用 m(mi) 替换 i,然后得到:

i=0n(m(mi))(mi1mn1)=i=0nm(mi1mn1)i=0n(mi)(mi1mn1)

然后对于后式使用吸收恒等式,变成

i=0nm(mi1mn1)i=0n(mn)(mimn)=mi=0n(mi1mn1)(mn)i=0n(mimn)

此时变成上指标求和的形式,化简完可以得到:

nmn+1(mmn)#

多重集组合数#

(nx1)(nx1x2)(nx1x2xk1xk)=n!x1!x2!xk!

最后我们来看两个最为重要的恒等式:

二项式定理#

(a+b)n=i=0n(ni)aibni

证明只需要考虑从每个单项式里选择 a 或者 b 就行。

带入一些 a,b 的特例可以得到如下三个式子:

0n=i=0n(ni)(1)i

组合数行内交错和。

2n=i=0n(ni)

子集个数。

3n=i=0n(ni)2i

子集枚举的复杂度。

范德蒙德恒等式#

i=0n(ni)(mki)=(n+mk)

这里的证明则需要考虑另一种常见的方式,组合意义。

这些就是就是常见的组合恒等式。

例一#

q 次询问,每次给出 n,l,r,求出下式的值:

i=lr(ni)

1n,l,r,q105

1.2 常见的组合意义#

  • n 个相同的小球分到 m 个不同的盒子里,且所有盒子非空。

插板法的经典应用,可以理解成在 n1 个空隙中插入 m1 个隔板,所以方案数为 (n1m1)

  • n 个相同的小球分到 m 个不同的盒子里,且盒子可以为空。

等价于右面方程的非负整数解的数量 x1+x2++xm=n

yi=xi+1,那么 y1+y2+ym=n+m,因为 x,y 一一对应,所以 x 的数量就是 y 的数量,而后者显然等于 (n+m1m1)

例三 [ABC240G] Teleporting Takahashi#

例四 CF1548C The Three Little Pigs#

例五 P4370 [Code+#4] 组合数问题2#

练习一 P8367 [LNOI2022] 盒#

1.3 Lucas 定理#

对于质数 p,有:

(nm)(n/pm/p)(nmodpmmodp)(modp)

预处理 n,m<p 时的阶乘和逆元,可以在 Θ(p)Θ(log2(n)) 内求组合数。

例五 [SHOI2015] 超能粒子炮·改#

F(n,k)=i=0k(ni)

F(n,k)=i=0k(nmodpimodp)(n/pi/p)

=i=0p1(nmodpi)j=0k/p1(n/pj)+i=0kmodp(nmodpi)(n/pk/p)

=F(nmodp,p1)F(n/p,k/p1)+F(nmodp,kmodp)(n/pk/p)

Θ(p2) 预处理,组合数直接 Lucas 求,复杂度 Θ(p2+Tlogp2n)

这个形式更加通俗的解释是:把 n,m 写成 p 进制,那么组合数就是每一位的组合数的乘积。

而这个解释通常可以把 Lucas 定理和 数位DP 联系在一起。

例六 [清华集训2016] 组合数问题#

因为答案等于每一位下 (ikjk) 的乘积,所以只要存在有一位 k,满足 ik<jk,那么 (ij)0(modp)

考虑数位 DP,设 fk,0/1,0/1,0/1,0/1 表示当前到第 k 位,是否出现 ik<jk 的位,ik,jk 是否卡上界,i 是否等于 j

而当 p=2 时,我们可以得到一个常用推论:

  • 对于 n,m,[n&m=m](nm)(modp)

例七 [CTSC2017] 吉夫特#

题给条件显然等于 abi+1abi 的子集,设 fi 表示结尾的 a=i 的方案数,每次枚举子集转移即可。

例八 CF1770F Koxia and Sequence#

练习二 [AGC043B] 123 Triangle#

练习三 P7976 「Stoi2033」园游会#

1.4 Kummer 定理#

对于 n,m,p(n+mn)p 的个数等于 n+mp 进制下的进位次数。

这个定理同样和数位DP关系密切。

例九 CF582D Number of Binominal Coefficients#

根据 Kummer 定理,我们只需要保证进位次数 α 即可。

数位DP,设 fi,j,0/1,0/1,0/1 表示当前第 i 位,总进位次数为 j ,是否卡上界,以及是否向当前位进位。

复杂度 Θ(logp2A)

posted @   Larunatrecy  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩