[CQOI2012] 局部极小值

前言

又是重庆题, 继续害怕
最近打算每天少踢点球, 我效率不高, 还是要多堆点时间的
然后就是倒计时要多关注, 别老无视
听讲很重要啊
冷静一点, 不死磕, 不畏难, 太难太偏的直接不管即可

思路

转化题意,

定义一个位置为局部极小值, 当且仅当其在以自己为中心 3×3 的方格中为最小值, 给出所有局部极小值的位置, 求有多少种方案数满足局部极小值位置的约束
特别的, n×m 的矩阵中, 填数仅能为 1n×m 的排列

how?
首先考虑你发现 n,m 非常小, 可能可以使用状态压缩的技巧
考虑局部极小值的性质, 如果我们从 1n×m 依次填写, 那么局部极小值一定是自己周围 3×3 大小的方格中最先填写的, 而非局部最小值一定不是
容易发现局部极小值的控制范围一定不重, 你甚至可以建出依赖关系的 DAG 方便理解

容易有朴素的想法是, 只状压局部最小值的处理
这样子容易想到转移

fi,S 表示考虑到第 i 个数, 其中填了的局部最小值的集合为 S
容易发现

fi,Sfi+1,Ss,sS=fi,S(h(S)i)fi+1,S

其中 h(S) 表示局部最小值填到这个情况时, 还可以填的位置个数, 可以 O(2xnm) 预处理

这样子计算出来的方案数有重, 具体的, 可能会出现一些非局部最小值比临点先放
考虑容斥, 具体的, 枚举实际上出现的局部极小值

运用超集反演即可

总结

这类约束条件一般分为两种方向

  • 正向约束: 局部极小值比临点先放
  • 反向约束: 非局部最小值比临点后放

约束条件, 可以建图方便思考

一类推出 dp 之后用容斥解决的问题

注意这题最大的性质在于可能的局部最小值个数很少

posted @   Yorg  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示