分析:
预处理
观察一下,发现对于每只猫,它在哪座山以及游玩时间我们并不关心,我们只需要求出能正好在第 i i i只猫游玩结束时接走它的出发时间 a i a_i ai。令 T T T数组表示 d d d数组的前缀和,即每座山与第一座山的距离,显然的,有:
a i = t i − T h i a_i = t_i - T_{h_i} ai=ti−Thi
为了快速计算对答案的贡献,需要对 a a a数组排序,并求出排序后的前缀和 S i S_i Si。注意到上式并没有与 0 0 0取 m a x max max,原因是我们只需要求出排序后各个 a i a_i ai之间的相对距离。
开始DP
根据人类智慧,要使总等待时间最短,每个人都会在 a a a中选择一个时刻出发。所以令 f i , j f_{i,j} fi,j表示第 i i i个人选择在 a j a_j aj出发的最小总等待时间。可以枚举上一个人的出发时间进行转移,显然有:
f i , j = min k = i − 1 j − 1 { f i − 1 , k + ∑ t = k + 1 j ( a j − a t ) } f_{i,j} = \min_{k = i - 1}^{j - 1}\{f_{i - 1,k} + \sum_{t = k + 1}^j (a_j - a_t)\} fi,j