是这样的,我一开始想这道题是用任务安排的思路去想的,设 f[i] 为前 i 个人到人民大学的最短等待时间, lt[i] 为前 i 个人到人民大学的最后一次发车时间,t[i] 为同学到达时间,转移方程:
f[i]=min(f[j−1]+(i−j+1)×max(lt[i]+m,t[i]))
然后就得了25pts
下载数据发现,每一次更新用的不一定是之前某个位置的最优解 比如下面这组数据:
排完序后的到达时间
0 0 0 0 0 0 82 82 82 83 83 84 85 85 85 85 94 95 96 97
当前的发车时间
0 0 0 0 0 0 82 82 82 84 84 84 86 86 85 85 94 95 96 97
等待时间之和
0 0 0 0 0 0 0 0 0 1 2 2 3 4 5 5 5 6 6 7
这里发现其实当前解的更新不一定是用的以前的最优解,所以我们要记录所有状态
设 f[i][j] 为将第 i 到 j 个人放在一起的最小花费,lt同理
转移方程就不写了,和上面差不多
理论时间复杂度O(n3) 只得了四十分,但跑得飞快
求dalao指出错误