[CQOI2012] 局部极小值
前言
又是重庆题, 继续害怕
最近打算每天少踢点球, 我效率不高, 还是要多堆点时间的
然后就是倒计时要多关注, 别老无视
听讲很重要啊
冷静一点, 不死磕, 不畏难, 太难太偏的直接不管即可
思路
转化题意,
定义一个位置为局部极小值, 当且仅当其在以自己为中心 \(3 \times 3\) 的方格中为最小值, 给出所有局部极小值的位置, 求有多少种方案数满足局部极小值位置的约束
特别的, \(n \times m\) 的矩阵中, 填数仅能为 \(1 \sim n \times m\) 的排列
\(\rm{how}?\)
首先考虑你发现 \(n, m\) 非常小, 可能可以使用状态压缩的技巧
考虑局部极小值的性质, 如果我们从 \(1 \sim n \times m\) 依次填写, 那么局部极小值一定是自己周围 \(3 \times 3\) 大小的方格中最先填写的, 而非局部最小值一定不是
容易发现局部极小值的控制范围一定不重, 你甚至可以建出依赖关系的 \(\rm{DAG}\) 方便理解
容易有朴素的想法是, 只状压局部最小值的处理
这样子容易想到转移
令 \(f_{i, \mathbb{S}}\) 表示考虑到第 \(i\) 个数, 其中填了的局部最小值的集合为 \(\mathbb{S}\)
容易发现
其中 \(h(\mathbb{S})\) 表示局部最小值填到这个情况时, 还可以填的位置个数, 可以 \(\mathcal{O} (2^{x} nm)\) 预处理
这样子计算出来的方案数有重, 具体的, 可能会出现一些非局部最小值比临点先放
考虑容斥, 具体的, 枚举实际上出现的局部极小值
运用超集反演即可
总结
这类约束条件一般分为两种方向
- 正向约束: 局部极小值比临点先放
- 反向约束: 非局部最小值比临点后放
约束条件, 可以建图方便思考
一类推出 \(\rm{dp}\) 之后用容斥解决的问题
注意这题最大的性质在于可能的局部最小值个数很少

浙公网安备 33010602011771号