组合数学学习笔记(一):组合数基础知识

一、组合数

1.递推式

(nm)=(n1m1)+(n1m)

证:左边相当于从 n 个数中选 m 个数,右边枚举第 n 个数选不选。如果选,就从剩下 n1 个数中选 m1 个;如果不选,就从剩下 n1 个数中选 m 个。

2.对称性

(nm)=(nnm)

证:左边相当于从 n 个数中选 m 个数留下,右边相当于从 n 个数中选 nm 个数丢弃。

3.吸收/相伴等式

(nm)(n1m1)=nm

证:原式 =n!(nm)!m!(n1)!(n1m+1)!(m1)!=n!m!(n1)!(m1)!=nm

(nm)(n1m)=nnm

证:原式 =n!(nm)!m!(n1)!(n1m)!m!=n!(nm)!(n1)!(nm1)!=nnm

(nm)(nm1)=nm+1m

证:原式 =n!(nm)!m!n!(nm+1)!(m1)!=(nm+1)!(m1)!(nm)!m!=nm+1m

4.上指标反转

(nm)=(1)m(mn1m)

证:原式 =nmm!=(1)m(n)mm!=(1)m(mn1)mm!=(1)m(mn1m)

5.三项式系数恒等式

(nm)(mk)=(nk)(nkmk)

证:左边相当于从 n 个数中选 m 个数,再从这 m 个数中选 k 个数,右边相当于从 n 个数中选 k 个数,这些数一定包含在要选的 m 个数中,因此就只用在剩下 nk 个数中选 mk 个数。

6.上指标求和

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

证:①原式 =i=mnimm!(当 im 时,无法从 i 个数中选出 m 个数,因此省去)=1m!i=mnim1m!i 无关,可以提出)=1m![(n+1)m+1m+1mm+1m+1](离散微积分,具体证明可见《离散微积分学习笔记》)=(n+1)m+1(m+1)!=(n+1m+1)

②右边相当于从 n+1 个数中选出 m+1 个数,左边相当于确定了第 m+1 个数的位置 i+1,要从前 i 个数中再选 m 个。

练习一

化简:i=0m(n+ii)

解:原式 $= \displaystyle\sum_{i = 0}^m\binom{n + i}{n} = \displaystyle\binom{n + m + 1}{n + 1}$ (上指标求和)。

7.下指标求和

i=0n(ni)=2n

证:①左边相当于从 n 个数中选任意个数,每个数都有选或不选两种方案,因此有 2n 种方案;

②当二项式定理中 xy 都为 1,就可以得出此等式。

例题一

一句话题意:给 q 组询问,每次给出 n,m,求i=0m(ni)

q,n,m105,对 109+7 取模。

解:把 n,m 看成区间,使用莫队算法(我不会qwq):

nn+1i=0m(n+1i)=i=0m(ni)+i=0m(n1i)=2i=0m(ni)(nm)(两排错位相加,减掉最后一位)

mm+1i=0m+1(ni)=i=0m(ni)+(nm+1)

8.下指标卷积 | 范德蒙德卷积

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

证:左边相当于从 n 个数中选 i 个数,再从 m 个数中选 ki 个数,右边相当于从 n+m 个数中选 k 个数,两者意义相同。

练习二|下指标点积

化简i=0m(ni)(mi)

解:原式 =i=0m(ni)(mmi)(对称性)= (n+mm)(下指标卷积)

9.上指标卷积

i=0n(ia)(nib)=(n+1a+b+1)

证:左边相当于在 n 个数中插入一个挡板,在挡板左边的数中选 a 个,在挡板右边的数中选 b 个,如果将挡板也看作一个数,那么就等于从 n+1 个数中选 a+b+1 个数,即右边的表达式。

练习三

化简:i=mn(1)i(ni)(im)

解:原式 =i=mn(1)i(nm)(nmim)(三项式系数恒等式)=(nm)i=mn(1)i(nmim)(nm)i 无关,可以提出)=(nm)i=mn(1)i(nm)im(im)!(组合数展开)=(nm)i=mn(1)m(in1)im(im)!(上指标反转)=(1)m(nm)i=mn(in1mn1)(组合数的定义)=(1)m(nm)(0mn)={(1)m:m=n0:mn

例题二

有标号连通图计数,n103

分析:记 fi 表示大小为 i 的有标号连通图的个数,gi 表示大小为 i 的有标号图的个数,则 gi=2(n2)

考虑简单容斥,求大小为 i 的有标号不连通图的个数:假设 1 号点所在连通块大小为j(j<i),则有 fi=gij=1i1(i1j1)fj

O(n2) DP 即可。

例题三

一句话题意:给定 LT 次询问,每次给定 n,m,k,求:i=0k(mi)(nmki)iL

T200,n,m,k2×107,L2×105

分析:原式 =i=0k(mi)(nmki)j=0L{jL}ij (斯特林数的计算式) =i=0k(mi)(nmki)j=0L{jL}(ij)j! (组合数的计算式) =j=0Li=0kj!{jL}(mi)(ij)(nmki) (将求和移动到最外层) =j=0Li=0kj!{jL}(mj)(mjij)(nmki) (三项式系数恒等式) =j=0Lj!{jL}(mj)i=0k(mjij)(nmki) (将只与 j 有关的因式外移) =j=0Lj!{jL}(mj)(njkj)

预处理一下斯特林数和组合数就可以 O(L) 每次询问了。

10.Lucas 定理

(nm)(npmp)(nmodpmmodp)(modp)

证:① (pm)modp=[m=0m=p]

(a+b)pap+bp(modp)(二项式定理展开);

(nm)=[xm](1+x)n ([xi] 表示多项式中 xi 项的系数,由二次项定理可得)

(1+x)n=(1+xpnp)(1+x)nmodp

(1+xpnp)(1+xp)np(modp) 只有产生 p 倍数处的贡献,而
(1+x)nmodp 只在 0p1 处产生贡献,所以每个位置刚好被贡献一次。

② 对于素数m,r(0,m)

(mr)=m!r!(mr)!=(m1)!(r1)!(mr)!×mr=(m1r1)×mr0(modm)

带入二项式定理的展开式,得:

(1+x)m=r=0m(mr)xr=1+r=1m1(mr)xr+xm1+xm(modm)

n=sm+a,有:

(1+x)n=(1+x)sm+a=(1+x)sm(1+x)a(1+xm)s(1+x)a(i=0s(si)xim)(j=0a(aj)xj)(modm)

又根据二项式定理 (1+x)n=r=0n(nr)xr,与上式对比得:

r=0n(nr)xr(i=0s(si)xim)(j=0a(aj)xj)(modm)

对比两边第 xr 次项的系数,根据 r=im+j,i=r/m,j=rmodm,a=nmodm,s=n/m,得:

(nr)(is)(ja)(modm)(rmnm)(rmodmnmodm)(modm)

二、二项式定理

11.二项式定理

(x+y)n=i=0n(ni)xniyi

证:第 i 项的系数等于从 nx+y 中选出 i 相乘后最高项系数和

练习四|牛顿级数

na 表示数列 a 差分 n 次后的数列,证明:nai=j=0n(1)j(nj)aij

证:①:当差分一次时,式子成立;假设对于前 n 次差分,都有 nai=j=0n(1)j(nj)aij,则 n+1ai=j=0n(1)j(nj)aijj=0n(1)j(nj1)ai1j=j=0n(1)j(nj)aij+j=1n+1(1)j(nj1)aij=j=1n+1(1)j[(nj)+(nj1)]aij=j=1n+1(1)j(n+1j)aij

符合数学归纳法,等式成立

②设 Iai=ai,Eai=ai1

nai=(IE)n=j=0n(nj)Inj(Ej)=j=0n(nj)(Ej) (I 变换多少次都不会影响序列) =j=0n(1)j(nj)Ej(将 1 提出) =j=0n(1)j(nj)aij(Ej 相当于将 ai 左移 j 位,到 aij)

三、错排

12.错排

fn 表示长度为 n 的,且不存在 pi=i 的排列的个数

fn=(n1)(fn1+fn2)

证:考虑数字 1n1 种放法,假如放到了位置 k,那位置 k 处的数字有两种类型的放法:要么放在位置 1,那么剩下物品的放法就有 fn2

如图
要么放在除 1 外的其他位置,那么让最后排完了时排在 1 位置的数字与排在 k 位置的数字 1 交换,不看 1 位置,就得到了一个大小为 n1 的错排,也就是这种情况下的每种方案可以与大小为 n1 的错排一一对应,故这种情况
fn1 种方案。

如图
例题四

一句话题意:记 cycπ 表示将排列 π 看成置换,其中循环的个数。给定 n,k 和一个 k1 次多项式 F,对于所有 1nmπF(cycπ)

其中 π 表示长度为 m 的错排

n6×105,k100,对 998244353 取模

分析:原式 =πi=0k1ficycπi(将多项式展开) =πi=0k1fij=0i{ji}(cycπj)j!(斯特林数的计算式) =πi=0k1j=0ifi{ji}(cycπj)j!(将求和移动到最外层) =πj=0k1i=jk1fi{ji}(cycπj)j!(交换求和顺序) =πj=0k1(cycπj)j!i=jk1fi{ji} (将只与 j 有关的因式外移) =j=0k1j!π(cycπj)i=jk1fi{ji} (将只与 π 有关的因式内移)

其中 i=jk1fi{ji} 可以 O(k2) 预处理

Ct,i 表示有 i 个循环,长度为 t 的错排数

Ct,i=(t1)(Ct2,i1+Ct1,i)(与错排递推式推导类似)

Pt,i=|π|=t(cycπi)

考虑枚举循环个数,当循环个数为 j 时,有 Ct,j 种排法,每种排法对 Pt,i 的贡献为 (ji)

Pt,i=j=1t(ji)Ct,j=j=1t(ji)[(t1)(Ct2,j1+Ct1,j)]=(t1)j=1t(ji)(Ct2,j1+Ct1,j) (将常量外移) =(t1)j=1t(ji)Ct2,j1+(t1)j=1t(ji)Ct1,j (拆括号) =(t1)j=1t((j1i)+(j1i1))Ct2,j1+(t1)j=1t(ji)Ct1,j (组合数递推式逆用) =(t1)j=1t(j1i)Ct2,j1+(j1i1)Ct2,j1+(t1)j=1t(ji)Ct1,j=(t1)(Pt2,i+Pt2,i1+Pt1,i)

于是 O(nk+k2) 预处理一下之后,对于每个 mO(k) 求答案即可。

posted @   JPGOJCZX  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示