Cnblogs
线段树优化 dp?线段树优化 dp!
Solution
题目来源:ABC334F(in 洛谷 | in AtCoder)题目大意很清晰就不讲了。
我们发现礼物是固定从 房间送的,唯一要分讨的地方就是什么时候要回去拿礼物。所以很容易想到二维 dp。
定义 表示圣诞老人从起点出发,到拿着 个礼物去 号房间后送出一个所用最短距离。
首先当 即礼物没有装满时,直接从上个房间过来更优。所以有 。其中 表示 号房间和 号房间之间的距离。
现在考虑 的情况。当我们想拿着最多的礼物去到 号房间时,因为去上一个房间已经用了一个礼物,所以我们不得不回家一趟去把礼物装满。我们在 中选一个已耗距离最小的状态,在那个状态的基础上回家拿礼物,再送往当前房间即可。
那么就有了状态转移方程:
其中 号点是家。边界条件是 。
可是这个 dp 是 的,显然无法通过本题。考虑优化。先观察 dp 过程,我们可以发现: 完全可以由 整体区间加实现,需要特殊对待的 也只需要由 。求区间最小值实现。
那么我们就可以只维护一个一维数组 的一段长度为 的窗口。一开始一维数组最左边只有一个元素 。每次,我们在数组最右端(记为 )加上 ,然后对区间 进行一个区间的加。这样更新操作与跑 的 dp 是完全等价的。
答案显然是 。
区间加区间最小值可以使用线段树维护。时间复杂度 。
Code
本文作者:Running-a-way
本文链接:https://www.cnblogs.com/Running-a-way/p/17941538/sol-abc334f
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步