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)$
输出方案就把编号放进线段树应该就可以了吧,但是我一直没写对。
代码就不贴了