排列数(又称下降阶乘幂)
nm=n(n−1)(n−2)....(n−m+1)=Anm
下降幂的差分
下降幂的差分具有良好的性质
Δnk=(n+1)k−nk=k∗nk−1(展开合并即可)
前缀和是查分的逆运算也具有良好的性质:
∑ik=0≤i<n∑ik=k+11nk+1
证明:
①:转换到组合意义
0≤i<n∑ik=0≤i<n∑Aik=k!10≤i<n∑(ki)=k!1∗Cnk+1=k!1∗(k+1)!(n−k−1)!n!=k+11∗n−j−1!n!=k+11Ank+1=k+11nk+1
②:直接通过下降幂的查分
nk+1=i=0∑n−1Δik=(k+1)i=0∑n−1ik⇒i=0∑n−1ik=k+11nk+1
牛顿二项式定理
(1+z)r=k∑(kr)zk
常见的组合数恒等式
吸收/提取恒等式:
(mn)=mn(m−1n−1)⇒m(mn)=n(m−1n−1)
证明显然
翻转上指标恒等式:
(mn)=(−1)m(mm−n−1)
证明:展开后将分子取反即可
三项式版恒等式:
(mn)(km)=(kn)(m−kn−k)
证明:考虑组合意义
平行求和:
k≤n∑(kr+k)=(nr+n+1)
将第一项变换后两两合并即可
上指标求和:
k≤n∑(mk)=(m+1n+1)
证明:考虑组合意义
从
n+1个球挑出
m+1个球,
(mk)表示最大标号为k的方案数,即可推得
范德蒙德卷积恒等式
k∑(kr)(n−ks)=(nr+s)
证明:考虑组合意义
两个大小分别为
r和
s的集合,总共要挑出
n个元素
容斥原理
基于恒等式:
k=0∑(−1)k(kn)=[n==0]
简单变形:
k≥1∑(−1)k(kn)=[n>0]
一般情形:
∣∣∣∣∣i∈I⋃Ai∣∣∣∣∣=α⊆I∑(−1)∣α+1∣∣∣∣∣∣i∈α⋂Ai∣∣∣∣∣
证明:考虑每个元素的出现集合
Sx={i∣x∈Ai},那么原式等价求
∑x[Sx>0]
考虑
x被算了几次
,对于
Sx的任何一个子集
s,
x都被加上了
(−1)∣s∣+1的贡献,故x被计算的次数为
∑k≥1(−1)k+1(k∣Sx∣)=[∣Sx∣>0]
容斥原理的另一种形式:
∣∣∣∣∣i⋂Ai∣∣∣∣∣=α∈I∑(−1)α∣∣∣∣∣i∈α⋂Ai∣∣∣∣∣
前半部分显然是求并集的补集,只要在对原来的式子取反即可
min-max容斥
记
max(S)为集合
S中最大的元素的值
记
min(S)为集合
S中最小的元素的值
有
max(S)=∑A⊆S且A̸=ϕ(−1)∣A∣−1min(A)
证明:
记
Sx为比
x元素大的元素集合
则
x的贡献为:
k∑(k∣Sx∣)(−1)k=[∣Sx∣=ϕ]
拓展形式:
lcm(S)=∑A⊆S且A̸=ϕ(−1)∣A∣−1gcd(A)
二项式反演
g(n)=k∑(−1)k(kn)f(k)⇔f(n)=k∑(−1)k(kn)g(k)g(n)=k∑(kn)f(k)⇔f(n)=k∑(−1)n−k(kn)g(k)
证明:
首先对于①式
k∑(−1)k(kn)j∑(−1)j(jk)g(j)=j∑(−1)jk∑(−1)k(kn)(jk)=j∑(−1)jk∑(−1)k(jn)(k−jn−j)=j∑(jn)g(j)k∑(−1)k(kn−j)=j∑(jn)g(j)[n=j]=g(n)
二式同理
我们考虑从母函数的角度去证明这个式子:
g(n)=k∑(−1)k(kn)f(k)g(n)=k∑(−1)k(n−k)!k!n!f(k)n!g(n)=k∑(−1)kk!f(k)(n−k)!1(n∑(−1)nn!f(n)zn)×(n∑n!1zn)Ge(z)=Fe(−z)ezGe(z)e−z=Fe(−z)Fe(z)=Ge(−z)ezf(n)/n!=k∑(−1)kk!g(k)×(n−k)!1f(n)=k∑(−1)k(kn)g(k)
第二个式子更简单:
g(n)=k∑(kn)f(k)⟺f(n)=k∑(kn)(−1)n−kg(k)n!g(n)=k∑k!f(k)(n−k)!1G(z)=F(z)ez⇒F(z)=G(z)e−zf(n)=k∑g(k)(n−k)!(−1)n−k
卡特兰数
多的就不讲了,讲一下通项推导 https://blog.csdn.net/a1035719430/article/details/85078446
广义容斥原理
α是指标集,设
f(α)表示不被
⋃i∈αAi且被
⋂i∈/αAi包含的元素个数,
g(α)表示不被
⋃i∈α包含的元素个数
则有递推关系:
f(α)=g(α)−α⊆γ,α̸=γ∑f(γ)
很多问题要求恰好在
k个集合中的元素个数(恰好满足
k个性质)
设其为
f(k),同时设
g(k)表示至少在
k个集合的方案数,先然后
f(i)=g(i)−k>i∑(ik)f(k)
例题:bzoj3622
传送门:https://blog.csdn.net/a1035719430/article/details/84955309
广义容斥的优秀做法
广义容斥还有
O(nlogn)的解法
g(i)=k∑(ik)f(k)=k∑i!(k−i)!k!f(k)⇒i!g(i)=k∑(k−i)!k!f(k)
令
G(i)=(N−i)!g(N−i),F(i)=(N−i)!f(N−i)!