这道题是线性dp,我们该怎么来解答呢?
我们可以考虑dpi为前i辆车最少的通过时间。
那我们该如何写这个转移呢?
考虑dp[i] = dp[j - 1] + time; 前i辆车的最短时间是,前i辆车的最短时间,i ~ j为最后一组,所需要的最短时间(time),加上前j - 1 辆车的最短时间(dp[j - 1]。
其次,对于j来说我们需要逆序排列, 如果不逆序,我们需要重新计算前面车子的最短速度。
然后我门需要判断这一组是否超重。根据题意,我们知道通车是只能按顺序,不能超车,也就是说, 我们可以利用前缀和来判断i~j这一个区间内的车子总重量。可以优化判断流程。
代码如下: