化柿子的时候化成一次函数的形式更直观一些(对我来说)。
如果是单调栈上二分 / 单调队列,这一类的,通常都是斜率或者某些东西具有单调性,这个东西不需要也尽量不要对每一种情况都整理下来应该怎么优化,是死板的。斜率优化是把一类 dp 问题变成数据结构问题,让数据结构维护这个凸包(或者说维护凸包上两点连线的斜率),应该具体情况具体分析。
如果加的决策点没有单调性,通常是 平衡树 / CDQ 分治 来解决,平衡树的话就是直接维护这个凸包,CDQ 分治则是通过分治来转成静态问题,然后用单调栈等数据结构解决。
有一种更普遍的做法,跳出维护凸包给我们思维上的限制,用李超树来维护一次函数(直线),也是一个 的,而且码力要求和常数上肯定都优于平衡树,但常数还有可能比较大(相比 CDQ 分治来说?),但不需要动脑子(也就是前文说的具体情况具体分析,分析哪些变量是单调的,这个凸包的形状是怎样的,依次加进去的决策点坐标的单调性,截凸包的直线斜率的单调性...),论性价比李超树也是一个很好的选择。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?