P1070 题解

· · 题解

参照:洛谷本题第二篇题解。

首先,注意到从 i 走到 i+1 的边的边权可以算到 i+1 的点权上,这样就将边权转化为了点权。

f_i 代表时间为 i 的最大收益。

$c_i$ 代表第 $i$ 个工厂的单个机器人花费。 $s_{i,j}$ 代表从 $1$ 时刻开始,一直向前走,走到 $i$ 时刻,到达 $j$ 工厂的总收益。 对于 $f$ 的计算,升序枚举时间 $i$,枚举此时的位置 $j$,然后再枚举上一次机器人走了 $k$ 步到达的当前节点。 $f_i = \max(f_{i-k}+s_{i,j}-s_{i-k,j-k}-c_{j-k})$。 设 $rec_{i,j} = {f_i-s_{i,j}-c_{j}}$。 $f_i = \max(rec_{i-k,j-k})+s_{i,j}$。 接下来每个对角线维护一个单调队列就搞定了。