3.24 —— 927 F
927 F
限时每日一题day20。感觉应该自己能做出来的一道题,中途没忍住看题解了,遂以失败告终。
状态定义:\(dp[i]\):考虑前 \(i\) 个位置是否使用,可以覆盖的最大线段数量。
转移:决策是否使用位置 \(i\)。
使用:\(dp[i - 1]\)
不使用:\(dp[L[i] - 1] + num[i])\)
二者取最大值转移给 \(dp[i]\)。
- \(L[i]\):所有覆盖位置 \(i\) 的线段中,最靠左的左端点位置
- \(num[i]\):覆盖位置 \(i\) 的线段数量
\(num\) 数组可以直接差分计算;计算 \(L\) 可以将所有线段按照右端点升序排序,再用 \(multiset\) 动态维护包含位置 \(i\) 的所有线段中最靠左的左端点。具体细节见代码。