1 条题解
-
0
题解
思路
令 表示恰好连续覆盖完 到 的最小费用,并令 。选择区间 作为最后加入的班次时,先前覆盖终点 必须满足 :左端条件保证没有空缺,右端条件保证新区间确实把覆盖推进到 。
因此转移为
$$dp[r]=\min\left(dp[r],\min_{k=l-1}^{r-1}dp[k]+S\right).$$做法
把班次按右端点排序,用维护区间最小值的线段树保存已经得到的 。每个班次做一次区间查询和一次单点取最小更新。答案为 。
若所有工资为零,只需用经典区间覆盖贪心判断可行性。若 ,可枚举上一个作为结尾的班次进行二次 DP。
复杂度
完整算法时间复杂度为 ,空间复杂度为 。
正确性证明
任意完整覆盖方案按所选班次右端点排列。对最后一个右端点为 的班次 ,此前方案必须覆盖至某个 ,否则会留空或不能推进;转移枚举了所有这些合法前驱。反之,任意合法前驱方案加上该班次都会连续覆盖至 。归纳可知每个 都是对应覆盖的最小费用,故 为最优答案。
- 1
信息
- ID
- 984
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者