文章目录
不定方程非负整数计数
考虑插板法
如果有下限可以直接移项,对于上限考虑进行容斥
对于上限有一种暴力容斥的方法,O(2^n)枚举所有子集
对于上限比较小的情况下可以进行dp每个容斥系数,相当于一个背包统计,本质上就是统计每个组合数的贡献。
f
i
,
j
表示前
i
个里边打破了
j
的方案数
f_{i,j}表示前i个里边打破了j的方案数
fi,j表示前i个里边打破了j的方案数
f i , j = f i − 1 , j + ( − 1 ) f i − 1 , j − b i f_{i,j}=f_{i-1,j}+(-1)f_{i-1,j-bi} fi,j=fi−1,j+(−1)fi−1,j−bi
Cirno的完美算数教室
求解[L,R]内满足被只含2或9的数字整除的个数
只有1000个左右的数字只含2或9,算出lcm后只需要很少的数字就会超过10^10,所以暴力dfs+剪枝即可通过,之所以能够通过在于去除倍数后剩下的数只有400多个,然后大概3、4个的lcm就会超过范围,所以大概复杂度是正确的。
Jordan筛法
n个集合中恰好属于m个集合的元素个数
只需要二项式反演即可求出
二项式反演
恰好和至多的转换,其实本质上就是钦定和恰好的转换
全错排问题
g_i表示恰好有i个位置错排,g_n即为答案,f_i表示至多i个位置错排, 然后f_i=i!那么就可以进行反演了
非标准的容斥
有的时候我们需要的容斥系数并不是那么简单,我们可以观察得到本质上这个东西等价于乘一个矩阵,然后我们现在想要找到另一个矩阵使得它是当前矩 阵的逆。那么我们通常的做法就是通过设出容斥系数,然后通过二项式反演来求解。
对于一个更一般的容斥,甚至不是子集关系,无法通过二项式反演求解,那么可以强行求解矩阵的逆。
例子1:kthmin-max容斥
例子2:直角三角形面积异或并
也就是我们现在可以快速求解三角形的面积交,然后我们想要求解异或并,那么考虑每个容斥系数,然后这个系数应该只和三角形个数有关,那么考虑每一个点,假设有n个三角形覆盖。
那么其实就是求解 ∑ i = 1 k ( k i ) g i = f k \sum_{i=1}^k\binom{k}{i}g_{i}=f_{k} ∑i=1k(ik)gi=fk然后我们就可以通过二项式反演找到这个系数。
g k = ∑ i = 1 k ( − 1 ) k − i ( k i ) f i g_k=\sum_{i=1}^k(-1)^{k-i}\binom{k}{i}f_i gk=∑i=1k(−1)k−i(ik)fi
斯特林数
边界
对于二者都是S(n,0)=[n=0]
常用公式
mn=\sum_{k=0}min(m,n)S2(n,k)\binom{m}{k}k!
左边:n个物品放到m个有顺序盒子的方案数
右边:枚举有k个非空集合,先将n个物品拆分为k个无标号盒子,然后选出k个盒子,将这k个盒子标号对应。
可以进行二项式反演求解第二类斯特林数
S2(n,m)=\frac{1}{m!}\sum_{k=0}m(-1)k\binom{m}{k}(m-k)^n
然后可以发现这个东西也可以利用容斥来理解
左边:放到恰好m个集合的方案数
右边:钦定k个集合用来放球,然后前面要乘上容斥系数。
CF932E Team Work
基本推式子题目,就是普通幂转组合数。
贝尔数
定义:
B
n
=
∑
k
=
0
n
n
,
k
B_n=\sum_{k=0}^n{n,k}
Bn=∑k=0nn,k
递推式:
B
n
=
∑
k
=
0
n
−
1
(
n
k
)
B
k
B_n=\sum_{k=0}^{n-1}\binom{n}{k}B_k
Bn=∑k=0n−1(kn)Bk
EGF:
e
e
x
−
1
e^{e^x-1}
eex−1
自适应辛普森积分
∫ a b f ( x ) d x ≈ ( b − a ) 6 [ f ( a ) + 4 f ( a + b 2 ) + f ( b ) ] \int_{a}^{b}f(x)dx\approx\frac{(b-a)}{6}[f(a)+4f(\frac{a+b}{2})+f(b)] ∫abf(x)dx≈6(b−a)[f(a)+4f(2a+b)+f(b)]