信息
- ID
- 1576
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
令 fi(x) 表示固定 Ai=x 后,从第 i 项到末尾能取得的最小代价。
可以归纳证明,在区间 [Li,Ri] 中使 fi 最小的所有整数总构成一个区间 [li,ri]。末项有 [lN,rN]=[LN,RN];向前转移时,若当前区间在 [li+1,ri+1] 左侧,则只有 Ri 最优,若在其右侧则只有 Li 最优,否则最优区间就是两者交集。由此可从后向前在线性时间求出全部 li,ri。
为了取得字典序最小的最优序列,先取 A1=l1。已经确定 Ai−1 后,最小化 ∣Ai−Ai−1∣+fi(Ai) 的最小可选整数为 Ai=max(Li,min(Ai−1,ri));该选择既保持后缀最优,又在当前位置尽可能小。
两次线性扫描即可完成,时间复杂度为 O(N),空间复杂度为 O(N)。