组合数学(待更新)

严格弱序(Strict Weak Ordering)

序理论相关可以看oiwiki序理论

严格弱序是一种二元关系(以下为简便称之为<,定义在集合S上),满足以下性质:

不可比关系(x is incomparable with y)可表达为¬(x<yy<x),这里为方便简记为p(x,y)

  1. 非自反性irreflexivityxS,xx

  2. 非对称性asymmetryx,yS,x<yyx

  3. 传递性transitivityx,y,zS,x<yy<zx<z

  4. 不可比的传递性transitivity of incomparabilityx,y,zS,p(x,y)p(y,z)p(x,z)

注意到满足严格弱序的运算符能够表示所有逻辑运算符,以小于号<为例:

  • a<b

  • a>bb<a

  • a=b¬(a<bb<a)

  • ab¬(b<a)

  • ab¬(a<b)

  • aba<bb<a

但不满足严格弱序的运算符(如)就不行。这也是C++中重载后的比较规则要满足严格弱序的原因(最初默认采用的是小于号<)。

Lucas定理

(nm)(npmp)(nmodpmmodp)(modp)其中p为质数。

证:

注意到 (pn)[n=pn=0](modp)

因此 (a+b)pap+bp(modp)

对于 f(x)=(1+x)n[xm]f(x)=(nm)

我们现在对 f(x) 做一点变换,

f(x)=(1+x)n=(1+x)p×np(1+x)nmodp=((1+x)p)np(1+x)nmodp

所以 f(x)(1+xp)np(1+x)nmodp(modp)

h(x)=(1+xp)np,g(x)=(1+x)nmodp

[xm]f(x)[xkp]h(x)×[xr]g(x)(modp)

因为 0r<p,所以将 m 拆成 m=kp+r 的形式的方法是唯一的,即 k=mp,r=mmodp

所以 [xkp]h(x)=(npmp),[xr]g(x)=(nmodpmmodp)

原式得证。

感觉不是很严谨,感性理解一下。

错排

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

fn=(n1)(fn2+fn1)

证明:

考虑将 1 放在位置 k 上(k1),这里有 n1 种方法,k 的放置位置可分类讨论。

  1. k 放在位置 1 上,那么还要将剩下 n2 个数错排,即 fn2

  2. k 放在位置 t 上,那么此时的错排中位置 1 上放的数 p 一定有 p1pk,所以可以构造另一个排列:将 p 放在位置 k 上,并将 1 与位置 1 去掉。显然新的排列是一个长度为 n1 的错排,且与原来的错排是 一一对应 的。即 fn1

综上,原式得证。

注意,本证明过程在某些题中也可以用来推导递推关系(如P7438 更简单的排列计数)。

鸽巢原理

(i=1npi)n+1 放入 n 个盒子,一定存在一个盒子 i,使得第 i 个盒子至少装了 pi 个物品。

证:

设第 i 个盒子装了 ai 个物品,假设:

xN1xn,ai<pi,则有 ai(pi)n<(pi)n+1,矛盾。

所以原命题得证。

练习

  1. 有十个数 a1,a2a10 满足 1i101ai60,证明能够从 ai 中挑出两个交为空的子集,使得它们的和相等。

证:

注意到两个交不为空且和相等的子集减去交集后和仍然相等,所以“交为空”的限制可以去掉。总共有 210=1024 个子集,而和的取值范围为 [0,600],根据鸽巢原理,原命题得证。

  1. 证明一张有超过 1 个点的简单无向图必定有两点度数相等。

证:

若有 2 个度为 0 的点,已有两点度数相等。

若有 1 个度为 0 的点,则其他 n1个点的度数的取值范围为 [1,n2],根据鸽巢原理,一定有两点度数相等。

若没有度数为 0 的点,则 n 个点的度数的取值范围为 [1,n1],根据鸽巢原理,一定有两点度数相等。

综上,原命题得证。

3.证明能从任意 11 个实数中挑选出 4 个数 a,b,c,d 满足:

(ac+bd)212(a2+b2)(c2+d2)Hint:cos<x,y>=xy|x||y|

证:

(ac+bd)2(a2+b2)(c2+d2)12x=(a,b),y=(c,d)cos2<x,y>≥12xyπ4

由于 11 个实数中根据鸽巢原理,至少有 6 个数符号相同,所以可以挑出三个同一象限的向量,其中一定有两个向量的夹角不大于 π4

容斥原理

练习一

n 个元素,问有多少种选择若干个子集的方案,使得选出的子集的交集大小恰好为 k

解:

设钦定交集大小为 k 的方案数为 g(k),交集大小恰好为 k 的方案数为 f(k)。有:

g(k)=(nk)(22nk1)g(k)=i=kn(ik)f(i)

解释以下第一个式子,钦定 k 个后还有 2nk 个子集,每个集合选或不选,即 22nk 种方案,最后要减去一个集合都不选的 1 种方案。

然后反演即可。

f(k)=i=kn(1)ik(ik)g(i)=i=kn(1)ik(ik)(ni)(22ni1)

练习二

有两个序列 ai,bi 保证所有元素互不相同。你需要重排 b 序列,使得恰好有 ki 满足 ai>bi,求方案数。

0<kn2000

解:

注意到序列 a 的顺序对答案是没有影响的,所以先将 a 从小到大排序。

dpi,j 表示考虑了前 i 对,有 j 对满足限制的。

发现转移不了(填当前位置上的 b 时不知道前面不满足限制的 b 与当前位置上的 a 的关系)。

考虑只算 a>b 的,即修改定义为考虑了前 i 对,钦定了 j 对满足限制的方案数,发现可以转移了。

dpi,j=dpi1,j+dpi1,j1×(cntaij+1)

cntai 表示序列 b 中比 ai 小的数的个数。

由于序列 a 单调递增,所以前面 j1b 都比 ai 小,在算的时候要减去。

g(k) 表示钦定 k 对满足限制的方案数,f(k) 表示恰好 k 对满足限制的方案数。有:

g(k)=(nk)!dpn,k=i=kn(ik)f(i)

于是反演即可。

f(k)=i=kn(1)ik(ik)g(i)=i=kn(1)ik(ik)(ni)!dpn,i

练习三

有一个 n×n 的矩阵,将其三染色,使得至少有一行或者一列同色,问方案数。

n106

解:

g(i,j) 表示钦定有 ij 列同色的方案数,f(i,j) 表示恰好有 ij 列同色的方案数。

我们发现,当 i>0j>0 时,这些同色的行和列一定是同一种颜色。故有下式:

g(i,j)={3n(nj)+j(nj)i=03n(ni)+i(ni)j=03(ni)(nj)+1(ni)(nj)Otherwise.

g(i,j)f(i,j) 的关系:

g(i,j)=k=int=jn(ki)(tj)f(k,t)

对此反演,有两种方法。

练三法一

g(i,j)=k=int=jn(ki)(tj)f(k,t)=k=in(ki)t=jn(tj)f(k,t)

我们设:

h(k,j)=t=jn(tj)f(k,t)

g(i,j)=k=in(ki)h(k,j)

对上面两个式子反演得到:

h(i,j)=k=in(1)ki(ki)g(k,j)f(k,j)=t=jn(1)tj(tj)h(k,t)

所以得到:

f(i,j)=t=jn(1)tj(tj)h(i,t)=t=jn(1)tj(tj)k=in(1)ki(ki)g(k,t)=t=jnk=in(1)k+tij(tj)(ki)g(k,t)

现在来考虑我们要求到什么。

求至少有 1 行或 1 列同色的方案数,即用总方案数减去恰好有 00 列同色的方案数,所以我们要求的是 f(0,0)

f(0,0)=t=0nk=0n(1)k+tg(k,t)

由于我们对 g 的取值进行了分讨,这里将式子按分讨拆开。

f(0,0)=t=1nk=1n(1)k+tg(k,t)+t=1n(1)tg(0,t)+k=1n(1)kg(k,0)+g(0,0)=t=1nk=1n(1)k+t3(nk)(nt)+1(nk)(nt)+t=1n(1)t3n(nt)+t(nt)+k=1n(1)k3n(nk)+k(nk)+3n2

后面三块式子已经可以 O(n) 做了,来看前面两重求和号的式子。

t=1nk=1n(1)k+t3(nk)(nt)+1(nk)(nt)=t=1nk=1n(1)k+t3n2+1ntnk+kt(nk)(nt)=3n2+1t=1n(1)t3nt(nt)k=1n(1)k(nk)3k(tn)=3n2+1t=1n(1)nt3nt(nt)k=1n(1)nk(nk)(3tn)k=3n2+1t=1n(1)nt3nt(nt)((3tn1)n(1)n)

这样子就做完了。

练三法二

对于我们要反演的式子:

g(i,j)=k=int=jn(ki)(tj)f(k,t)

有二元二项式反演:

f(i,j)=t=jnk=in(1)k+tij(tj)(ki)g(k,t)

证明同法一。

可以推广到 n 元的形式。

练习四

{nm} 表示把 n 个不同的物品划分为 m 个集合构成簇的方案数(不允许空集),求 {nm}

解:

显然有 O(nm) 的递推:

{nm}={n1m1}+m{n1m}

另一种更快的做法:

f(m) 表示恰好把 n 个不同的物品划分为 m 个互不相同的集合构成簇的方案数(集合不能为空),g(m) 表示把 n 个不同的物品放入钦定的 m 个互不相同的集合构成簇的方案数,其中集合可以为空。

所以 g(m)=mn=i=0m(mi)f(i)

反演一下得到:

f(m)=i=0m(1)mi(mi)g(i)=i=0m(1)mi(mi)in=i=0m(1)mim!in(mi)!i!

由于原来的集合都是相同的,所以 {nm}=f(m)m!

即:

{nm}=i=0m(1)miin(mi)!i!

Min-Max容斥

证明

maxkthS=TS(1)|T|k(|T|1k1)minT

=xSxxTS(1)|T|k(|T|1k1)[minT=x]

f(x) 表示 S 中大于 x 的元素构成的集合。

=xSxxTf(x)(1)|T|k(|T|1k1)

枚举 |T|:

=xSxl=1|f(x)|(1)lk(|f(x)|1l1)(l1k1)

=xSxl=1|f(x)|(1)lk(|f(x)|1k1)(|f(x)|klk)

=xSx(|f(x)|1k1)l=1|f(x)|(1)lk(|f(x)|klk)

易知 |f(x)|<k 时无贡献。

=xSx(|f(x)|1k1)l=0|f(x)|k(1)l(|f(x)|kl)

=xSx(|f(x)|1k1)[|f(x)|=k]

=maxkthS

原式得证。

证明 min 的方法类似。将 k=1 代入得到另外两个式子。

练习一

给定三个序列 ai,bi,ci,求

1i<jnmaxai+aj,bi+bj,ci+cjminai+aj,bi+bj,ci+cj

n2×105

解:

暴力拆开那个 max :

maxai+aj,bi+bj,ci+cj

=minai+aj+minbi+bj+minci+cj     minai+aj,bi+bjminai+aj,ci+cjminbi+bj,ci+cj     +minai+aj,bi+bj,ci+cj

抵消掉最后那一项,剩下的项中,只有一个的是平凡的,有两个的可以二维偏序,总复杂度就是 O(nlogn)

练习二

n 个元素,每次会随机选择一个,有 pi 的概率选择第 i 个,问第一次所有元素都被选择过的期望时间。

1n20

解:

因为 min/max 容斥都是线性运算,且期望具有线性性,所以可以直接套上期望:

E(maxS)=TS(1)|T|1E(minT)

E(minT) 的含义实际上就是第一次选到 T 中元素的期望时间,可以把 TT 的补集看做两个整体,那么一次选中的概率就是 xTpx,期望时间就是其倒数 1xTpx

然后直接带进式子里计算即可,O(n2n)

练习三

n 个元素,每次会随机选择一个,有 piM 的概率选择第 i 个,问第一次有 k 个元素被选择过的期望时间。

1ln103,n10kn,i=1npi=M104

解:

相当于求期望出现时间第 nk+1 大,令 knk+1,一样的期望式子列出来:

E(maxkthS)=TS(1)|T|k(|T|1k1)MxTpx

直接求肯定 G。因为 M104,所以考虑计算每一种 xTpx 作为分母的项的系数之和,再算答案。

考虑设 dpi,j 表示前 i 个,分母和为 j 的项的系数和。

不选很好转移,选的话中间那坨组合数就不太能转的动。

考虑到 (|T|1k1)=|T|1|T|k(|T|2k1),所以我们可以在方程里及一个 l=|T|,那就可以转了:

dpi,j,l=dpi1,j,ll1lkdpi1,jpi,l1

但是这个方程是 O(n2m) 的,显然过不了,且没用到 k10 的性质。

又考虑到 (|T|1k1)=(|T|2k1)+(|T|2k2)

那么只需要在方程中记 l=k 即可转移:

dpi,j,l=dpi1,j,l+dpi1,jpi,l1dpi1,jpi,l

(解释:如果第 i 个不选,即有 dpi1,j,l 的贡献,如果第 i 个要选,即 |T||T|+1,观察把组合数拆开之后的式子,(1)|T|k 的符号会改变,所以拆开后的 (|T|2k1) 这一项的符号改变,贡献为 dpi1,jpi,l。而对于 (|T|2k2) 这一项,k 的值也变化了 1,对于 (1)|T|k 的影响还有一个 1,所以符号不变,贡献为 +dpi1,jpi,l1

就可以 O(nmk) 了。

康托展开

Question:求1n的一个排列的排名。

式子:

ans=i=1nsumai×(ni)!

其中sumai指下标大于i的数中比ai大的数的个数。可以用树状数组来维护这个东西。

理解一下,有些类似数位DP,前i1位视作固定了,那么只有sumai个数放在第i位时比当前的排列排名小。

确定好第i位后,后面ni位就随便放,所以式子长这样。

注意一下这里的排名从0开始。

posted @   RandomShuffle  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示