1 条题解
-
0
题解
思路
长度为 的区间至少占用 个位置,所以只需考虑 。
对固定长度 ,从右向左维护后缀中可行的 段方案。令 表示在后缀 中选择长度依次为 的区间时,第一段区间和的最大可能值;不可行时为负无穷。
做法
当 时, 是后缀最大元素。对 ,在位置 有两种选择:
- 跳过 ,继承 ;
- 让长度为 的第一段从 开始。记该段和为 ,若 ,就能在其右侧接上合法的其余 段,此时用 更新答案。
因此
$$dp_k[i]=\max\left(dp_k[i+1],\;S(i,i+k-1)\ \text{(当 }S(i,i+k-1)<dp_{k-1}[i+k]\text{)}\right).$$每一层只依赖上一层,使用两个一维数组即可。
子任务 1
正整数全等时,任意较长区间的和都严格大于较短区间的和,无法满足递增要求,所以答案恒为 。
子任务 2
枚举 并递归枚举所有区间起点,直接检查相邻区间和,适用于 。
子任务 3
可按定义枚举当前后缀中的第一段起点,得到 的转移。
子任务 4
利用后缀最大值递推消去起点枚举,得到上述满分算法。
正确性证明
对 归纳。 时,后缀中任选一个单点即可,最大首段和显然是后缀最大值。假设 定义成立。任意后缀 中的 段方案,要么不使用位置 ,属于 ;要么第一段恰从 开始,其余方案位于 之后,且存在的充要条件是当前段和严格小于右侧 段方案可取得的最大首段和。递推完整覆盖且只保留可行方案,因此成立。最终最大的可行层数即答案。
复杂度
- 时间复杂度:。
- 空间复杂度:。
- 1
信息
- ID
- 1187
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者