进行一个脑的补
我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。我要喝六个核桃。
很多时候有意义的状态是不多的或是呈现某种特殊分布的,特此记录一些很需要脑子的东西。
当你发现一个 的可行性 dp,而且没办法优化时,常见的办法是维护点集,点集有很多常见的姿态需要发现,当然,这种 维护点集 的技巧 ,不仅限于用在维护 dp 数组上。
-
区间(介值定理记录 minmax)
-
个区间,这个时候一般可以暴力维护一些没那么好做的操作
-
每次如果可行点数是向两边 的就要考虑是不是区间。
eg. 每步做一次区间赋值 0 或 1,做完后所有 1 向两边扩展 1,这个段数就是 的。
eg. CF1852D,因为扩展到另一侧再扩展回来会把 +2 造成的空给填充,所以最多只有 2 个区间。
- 个区间,这个时候一般要使用平衡树等数据结构维护
eg. CF1415F 分别维护二人拿这个蛋糕时另一个人的可行区间,每次新增的区间都包含 ,所以会合并成一个区间,可以证明区间总量 。
- 一个数的所有倍数
这个时候有可能会涉及一些数论知识或者调和级数的复杂度。
- 值域本身就是 或者 的。
比较常见,但是有时候很难发现。
出现的原因常常是转移中出现了二次项,且值域上限为 ,或是转移出现了使某个值至少翻倍或成某比例变大。
eg CF354D CF1830D ABC203F
- 个等差数列
痛 苦 面 具
往往涉及 border 理论和 palindrome series 会涉及。
有时候要根号分治维护。
- 整线段 + 若干散点
很怪。 往往在涉及到 max/min 或者相关分情况讨论的时候可能会出现。
eg CF1500F 维护可行的 dp 值,每层会新增一个区间,若干散点,我也不知到怎么 可以发现, 出现新增区间的时候一定会合并一堆区间。
本文已经结束了。本文作者:ღꦿ࿐(DeepSea),转载请注明原文链接:https://www.cnblogs.com/Dreamerkk/p/17970916,谢谢你的阅读或转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步