计数
计数
枚举
通过一些有效的枚举简化问题的维度,将计数问题简单化。
不同方向思考
计数问题往往有很多方向,如序列、值域、极值。
从不同的方向考虑往往有大不一样的结果。
DP
设计状态非常重要,在什么结构上 DP 非常重要。
序列上 DP,树上 DP,DAG 上 DP,都有很多成体系的优化转移方法,具体问题具体分析。
DP 的具体内容不在这里展开了。
容斥
正难则反
即对于一个计数对象不好计算我们可以计算其补集。
容斥原理
并集大小可以转化成子集交集大小的线性组合。
Min-Max 容斥是其直接的推导,期望形式是常用的一种手段:
我们以扩展 Min-Max 容斥为例来展示推导容斥系数的通用方法。
一个自然的想法是如果我知道每个子集的最小值,我应该能知道第 \(k\) 大的元素值。
\(\operatorname{kthmax}(S)=\sum_{T\subset S,T\neq\varnothing}f(|T|)\min(T)\),\(f(|T|)\) 是容斥系数。
我们只希望保留第 \(k\) 大元素的贡献,即容斥系数需要满足:
\([i=k]=\sum_{j=1}^{i}\dbinom{i-1}{j-1}f(j)\),对其二项式反演可以得到 \(f(i)=(-1)^{i-k}\dbinom{i-1}{k-1}\)。
更多展开可以参考博主之前的博文。
连通块相关容斥
对于无向森林计数连通块数,经典的方法是使用点减边容斥。
对于平面图计数连通块数,我们可以使用平面图欧拉定理,即 \(|V|-|E|+|F|=c\),这里的 \(|F|\) 不考虑无限面。
一个有趣的例子是:treecnt。
数序列值域连续段也可以用到类似的想法,对于一个值域连续段,其满足 \(mx-mn=r-l\),而对于一个排列所有区间一定有 \(mx-mn\ge r-l\),这样一个最小的结构可以用最小值数量来刻画。
更多至于连续段问题可以使用析合树进行分析。
生成函数
GF 只能说是仁者见仁智者见智了。
感觉很多 GF 的处理技巧还是很成体系与很值得记录的,但是博主的 GF 水平很一般/ll。
- 分离常数法
推生成函数经常可能遇到 \((\dfrac{q+px}{1-x})^k\) 形式的式子,这里除了考虑 \(\dfrac{1}{(1-x)^k}\times (px+q)^k\)(卷积),还存在另一种思路。
即分离常数法:\((-p+\dfrac{p+q}{1-x})^k\),接下来直接使用二项式定理展开。 - 归纳 GF 形式
见得多一点的是 \(\exp\) 相关的,例如,\(F=\sum_{i}a_i\exp(iz)\)。 - binomial sum
但是博主并没有很理解 EI 的博客。
一个简单的技巧是对于 \(i^k\) 的处理可以简单的替换成 \([\dfrac{z^k}{k!}]\exp(iz)\)。
集合幂级数
FWT 一类。之前有博文特地整理过这里就不展开了。