solution-cf141d

浪费了我一个晚上。

显然的,我们可以设 $f_i$ 表示到达第 $i$ 个起跳点且可以起飞的最小时间。

于是 $f_i = \min\limits_{j = 1}^{i-1}{f_j + t_j + |(x_i - x_p) - (x_j + d_j)| + p_i}$

有一个绝对值,不好转移。考虑拆成 $x_j + d_j \leq x_i - x_p$ 和 $x_j + d_j > x_i - x_p$ 两部分分别计算。

即 $f_i = \begin{cases} \min\limits_{j = 1}^{i-1}{f_j + t_j + (x_i - x_p) - (x_j + d_j) + p_i}(x_j + d_j \leq x_i - x_p) \\ \min\limits_{j = 1}^{i-1}{f_j + t_j - (x_i - x_p) + (x_j + d_j) + p_i}(x_j + d_j > x_i - x_p) \end{cases}$

这个柿子看着就很好优化。直接考虑离散化值域后用线段树优化维护转移即可。

时间复杂度 $O(n \log n)$

输出方案就把编号放进线段树应该就可以了吧,但是我一直没写对。

代码就不贴了

posted @ 2023-11-17 10:28  WRuperD  阅读(2)  评论(0编辑  收藏  举报  来源

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

这是一条自定义内容

这是一条自定义内容