计数

计数

枚举

通过一些有效的枚举简化问题的维度,将计数问题简单化。

不同方向思考

计数问题往往有很多方向,如序列、值域、极值。
从不同的方向考虑往往有大不一样的结果。

DP

设计状态非常重要,在什么结构上 DP 非常重要。
序列上 DP,树上 DP,DAG 上 DP,都有很多成体系的优化转移方法,具体问题具体分析。

DP 的具体内容不在这里展开了。

容斥

正难则反

即对于一个计数对象不好计算我们可以计算其补集。

容斥原理

\[\cup_{i=1}^nP_i=\sum_{S\in [n],S\neq \varnothing}(-1)^{|S|-1}\cap_{j\in S}P_j \]

并集大小可以转化成子集交集大小的线性组合。
Min-Max 容斥是其直接的推导,期望形式是常用的一种手段:

\[\max_{i\in S}a_i=\sum_{T\subset S,T\neq \varnothing}(-1)^{|T|-1}\min_{j\in T}a_j\\\min_{i\in S}a_i=\sum_{T\subset S,T\neq \varnothing}(-1)^{|T|-1}\max_{j\in T}a_j \]

我们以扩展 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。

  1. 分离常数法
    推生成函数经常可能遇到 \((\dfrac{q+px}{1-x})^k\) 形式的式子,这里除了考虑 \(\dfrac{1}{(1-x)^k}\times (px+q)^k\)(卷积),还存在另一种思路。
    即分离常数法:\((-p+\dfrac{p+q}{1-x})^k\),接下来直接使用二项式定理展开。
  2. 归纳 GF 形式
    见得多一点的是 \(\exp\) 相关的,例如,\(F=\sum_{i}a_i\exp(iz)\)
  3. binomial sum
    但是博主并没有很理解 EI 的博客。
    一个简单的技巧是对于 \(i^k\) 的处理可以简单的替换成 \([\dfrac{z^k}{k!}]\exp(iz)\)

集合幂级数

FWT 一类。之前有博文特地整理过这里就不展开了。

posted @ 2023-07-14 19:57  juju527  阅读(142)  评论(1编辑  收藏  举报