解题思路
错误示范
第一眼看过去,便不难想到构造:
令 $dp[i]$ 表示从时间点 $1$ ~ $i$ 的最大空暇时间
1 | for i in range(1, n): |
但是这样做显然会有一个问题:
$dp[i]$ 的计算只考虑了这个时间点做完的任务, 也就是说, 可能 Nick 直到下班了也没有做完任务, 此时做最后一项任务的时间段也会被算为空暇时间.
有没有什么改进的方法呢?答案是肯定的,那就是倒着 DP。
令 $dp[i]$ 表示从时间点 $i$ ~ $n$ 的最大空暇时间
这样做的好处在于, 它考虑的不再是做完的时间, 而变成了每个任务的开始时间(Nick 总不会勤奋到提前几分钟开始工作吧), 这样就完美的避免了以上那个问题.
1 | for i in range(n, 1, -1): #倒着循环 |
完整代码
1 |
|