Slope trick优化dp
适用于一类dp值关于下标的函数是连续函数,分段函数,凸函数,每一段需要是一次函数,需要是整数斜率。常见于一些最小调整代价题,因为经常会有这种典型符合上述要求的函数出现,而且这类dp通常会有对应下标相加的形式出现。
我们考虑通过最右一段的一次函数,和前面的分界点来表示这个函数。要求相邻段之间函数的斜率差为,也就是说如果真正的函数里有相邻两段之间斜率差不为的话,这个分界点要在数据结构里出现多次。比如下面这个函数:
那我们需要维护一个最右段函数,和一个分界点集合。
两个满足条件的函数相加的话,就是最右段函数相加,分界点集合取并。因为都是连续函数,只要维护的斜率是对的,函数值就肯定就是对的。
但是你可以发现维护最右段函数并不重要,分界点集合才重要。所以说最右段函数只是其中一种维护方式。通过几道题来用一下。
CF713C
首先严格递增这个事很烦,把他转化成单调不降,就是令。然后暴力dp就很显然了。令值域为。
用函数来代替这个的第二维。设函数为第二维的前缀最小值对应的函数。那么有
考虑用维护最右段函数的方式维护和。一个下凸函数取前缀最小值的话,相当于是把斜率为后面的段全部去掉,变成和这段一样。这个是一个很简单的函数,他的最右段函数就是,分界点集合就是。用一个优先队列维护即可,复杂度。
回顾一下刚才的过程,实际上slope trick优化dp大多数就是转移时构造一个替代那一坨,把转移方程转化为对应下标相加的形式。用维护最右段函数来表示这个函数的优势实际上在于这个构造出来的函数如果是前缀最小值的话,非常容易维护。同样的,如果是后缀最小值,可以考虑维护最左段函数。
CF1534G
推性质部分见我的置顶博客去Ctrl+F。快进到优化dp部分。还有,这个dp需要整数定义域是一段连续区间,否则不能维护。那么这个题可以通过倒着设状态来规避dp值里有正无穷的问题。
这里的,,对于固定的都是固定的,不用管。第二个号暴力枚举复杂度是对的。
设
那么有
这个形式不太好看,由于他不是前缀min也不是后缀min,影响到的东西比较多。但是他是一段包含自己的区间,对于一个下凸函数,下标函数值变成一段包含自己区间的函数值最小值是很有规律的。我们可以考虑维护中间斜率为的一段的截距。设中间那段区间为(分段连续函数开区间闭区间不重要)。
那么对于的部分,函数值显然没有变化。对于左边,相当于把这段区间拉长为,左边的部分整体平移到左边。所以用一个大根堆,一个小根堆分别维护两侧的分界点集合,对于一次从变成,把左侧的堆整体打一个标记即可。
往里加一个的话,就要对于和中间段端点大小关系分类讨论了。在区间内的话,直接往左插一个,往右插一个。在左边的话,就插入两个,然后把左边堆顶弹出来插入右边堆即可。过程有点类似对顶堆。右边类似。
这么做是利用凸函数区间min的性质。只要维护出来中间段特殊的地方即可。
APIO2016烟花表演
dp是非常显然的。对于的每个儿子,设为边权,有
这个形式其实就很复杂了。还是设。
虽然形式很复杂,而且没法把和枚举min的拆开。那就整体考虑,但是还是和上一个题一样,这是个凸函数,只要是一段区间的最小值肯定有很好的性质。这是个前缀的最小值,虽然不是的前缀最小值。。所以说就肯定和中间最低的一段有关。具体就不展开了,借助都是整数斜率这个性质,自己分类讨论手推一下容易得到:
别管看起来多花里胡哨,别忘了我们只需要维护分界点集合和某一段函数。观察这个形式发现斜率大于的只有一段,那就可以考虑维护最右段函数。只要能把最右段函数维护出来,前面式子根本不用管,就把分界点弄对就行。仔细观察一下发现需要把所有斜率大于的分界点都弹掉。根据合并的性质,一个函数斜率大于的段只有儿子个数个,所以暴力弹就对。分界点集合的话,发现就是删掉一个和,加入一个和。然后两个儿子合并的话可以启发式合并就。写可并堆就少一个。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具