题解
样例分析
思路
nnn 个时间段 [li,ri][l_i,r_i][l i ,r i ],按照开始时间从小到大排序。
定义dp[i]dp[i]dp[i],表示以第 iii 个线段结尾的摸鱼时间最大值
需要考虑 dpdpdp 的起始状态、状态转移方程、输出的最终结果。
起始状态
可能有 lil_il i 相同的时间段,需要把和 l1l_1l 1 相同的 lil_il i 这个时间段全部赋初值。
状态转移方程
假设 第 iii 个时间段是由第 jjj 个时间段转移来的( i 到 j 之间的时间段为 k )。需要符合的条件:
* lil_il i >rjr_jr j
* max(lk)max(l_k)max(l k ) ≤\leq≤ rjr_jr j
输出最终结果
考虑哪一个时间段可以作为结尾?
假设结尾的时间段为 iii, 需要满足的条件为:
* ri≥lnr_i \geq l_nr i ≥l n
优化
上述时间复杂度 O(n3)O(n^3)O(n 3 )
寻找合适的 jjj 线段可以优化:
复杂度 O(n2)O(n^2)O(n 2 )