前言
又是重庆题, 继续害怕
最近打算每天少踢点球, 我效率不高, 还是要多堆点时间的
然后就是倒计时要多关注, 别老无视
听讲很重要啊
冷静一点, 不死磕, 不畏难, 太难太偏的直接不管即可
思路
转化题意,
定义一个位置为局部极小值, 当且仅当其在以自己为中心 \(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}\) 之后用容斥解决的问题
注意这题最大的性质在于可能的局部最小值个数很少