NOIP2011-bus-题解

原题链接:Link

题目描述

\(n\) 个站点, \(n - 1\) 段路。\(m\) 个人在时刻 \(t_i\) 到达 \(a_i\) 点,要去 \(b_i\) 点。只有一辆车,所以车会等所有人。现在有 \(k\) 次魔法能让任意一段路变短一点,求乘客等车+坐车的总时间的最小值。

思路分析

考场上写挂的最大原因:

如果车不用等人,将前面的一段路变短,对后面的人也会有贡献(等车时间变短)。贡献区间可以无限延长,直到在某一站变成人等车。

所以要先求出每一段路可以贡献几站,从后往前 DP 即可。

正确求出贡献之后就简单了,每次选取贡献最大的一段路变短。

AC代码