2025.2.17 闲话:max分类讨论处理;区间DP另一枚举顺序;改变数组顺序卡常
\[\min_{l≤k<r}\{ \max(f_{l,k},f_{k+1,r})+a_k \}
\]
如此篇题解所说,公式中一个 \(\max\) 让这个式子变得难以处理。
这个时候就可以考虑分类讨论,考虑当什么时候 \(\max\) 取 \(f_{l,k}\),什么时候取 \(f_{k+1,r}\)。这样的分类讨论常常就会引出正确的结论:比如推式子推出一些性质,引出一些解决方法等。
在本题中,这样会引出这道题的二段性,从而想到对分界点左右侧做处理,即引出了正解。
区间 DP 的常用枚举顺序为外层从小到大枚举长度 \(len\),内层枚举左端点 \(l\),右端点 \(r\) 由计算得来。这样可以保证枚举到的每一个区间的所有子区间都已经被访问过了。
这道题中,这样的枚举顺序不太好用,所以我在题解中学了另一种枚举方式:
- 外层从小到大枚举右端点 \(r\),内层从大到小枚举左端点 \(l\)。
这样也可以保证枚举到的每一个区间的所有子区间都已经被访问过。
卡常小技巧:注意到这道题中主要是对 \(f_{x,r}\) 操作,第二维在内层循环时固定。这个时候可以尝试交换 \(f\) 两个维度,用 \(f_{r,l}\) 来表示区间 \([l,r]\),避免了 CPU 指针的大幅度跳跃,实测可以将时间缩为原来的 \(40\%\)。
本文采用 「CC-BY-NC 4.0」 创作共享协议,转载请注明作者及出处,禁止商业使用。
作者:Jerrycyx,原文链接:https://www.cnblogs.com/jerrycyx/p/18755584
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步