「学习笔记」数学(二)
写在前面:这篇文章进一步介绍一些基础数学知识,包括组合的进一步研究、特殊的数等。
容斥原理
复习一下最基础的容斥:
Min-Max 容斥
kth Min-Max 容斥
一般化的容斥
那么
容斥系数
对于最简单的组合容斥\(ans = \sum_{\text{some set s1, s2, ..., sk}} ans(s1 \cap s2 \cap ... \cap sk))f(|s1 \cap s2 \cap ... \cap sk|)\)
要满足假设一个点在\(n\)个集合里,\(\sum_{i = 1}^n {n \choose i} f(i) = [n > 0]\)。
最后一步根据题意可以改,\(O(n^2)\)可以求容斥系数\(f\)
还有一种斯特林形式,十分类似,即\(ans = \sum_{x 是一个划分} ans(x) f(|x|)\)
还有一些其他的trick,比如把一个划分的容斥系数定为各部分size的容斥系数乘起来。
假设一个点被选中\(n\)次,容斥系数应该满足\(\sum_{i = 1}^n{n\choose i}f(i) =n\bmod 2\),答案就是\(\sum_{S} { \left\lfloor\dfrac{n}{lcm(S)} \right\rfloor f(|S|)}\)
斯特林数
贝尔数 Bell
定义\(B_n\)表示把\(n\)个不同元素划分成若干集合的方案数。很多时候在复杂度分析上会用到他。
Bell数的前几项是:
\(1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975\)
递推公式:枚举\(k\)表示多少元素不与最后一个元素在同一个集合。
和第二类斯特林数的关系:\(B_n\)等于第二类斯特林数第\(n\)行之和。
二项式反演
二项式反演常用于解决恰好取若干个的问题
形式1
证明:
注意一下,\((-1)^{i+j}=(-1)^{i-j}\)
形式2
证明:
P.S. 感谢why队长完成形式2证明。
实际上也有基于容斥的证明,大概思想就是把容斥的式子和f,g函数对应,以后有时间可以来证,问题不大。
接下来看一个例题:Gym 101933K:King's Colors
题意:用恰好k种颜色涂n个结点的树,相邻结点不能同色,问方案数\(\mod 10^9+7\)。\(2\leq k\leq n \leq 2500\)。
题解:
如果是用\(k\)种颜色随便涂,答案就是\(k(k-1)^{n-1}\),根是随意的,其他结点不能和父亲颜色一样。
既然\(\leq k\)很好求,那令\(g(k)\)表示用\(1...k\)这些颜色的涂法,\(g(k)=k(k-1)^{n-1}\)
同时:(我们认为\(f(0)=1\))
直接二项式反演:
预处理组合数就做完了,时间复杂度\(O(k\log n)\)。(树结构读都不用读)
#include <algorithm>
#include <cstdio>
using namespace std;
const int mo = 1e9 + 7;
const int N = 2510;
int n, k, fac[N] = {1}, fav[N];
int qpow(int a, int b) {
int ans = 1;
for(; b >= 1; b >>= 1, a = 1ll * a * a % mo)
if(b & 1) ans = 1ll * ans * a % mo;
return ans;
}
int C(int x, int y) {
return x < y ? 0 : 1ll * fac[x] * fav[y] % mo * fav[x - y] % mo;
}
int main() {
scanf("%d%d", &n, &k);
for(int i = 1; i <= k; i ++) fac[i] = 1ll * fac[i - 1] * i % mo;
fav[k] = qpow(fac[k], mo - 2);
for(int i = k; i >= 1; i --) fav[i - 1] = 1ll * fav[i] * i % mo;
int ans = 0;
for(int i = 0; i <= k; i ++) {
int t = 1ll * i * qpow(i - 1, n - 1) % mo * C(k, i) % mo;
if((k + i) & 1) (ans += mo - t) %= mo;
else (ans += t) %= mo;
}
printf("%d\n", ans);
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步