1 条题解
-
0
解法思路
1. 核心观察
学生 能通过考试的条件是:存在一个长度 ≥ 2 且包含 的区间 ,满足:
这个条件确保区间内所有学生都能通过一次作弊达到要求。
2. 问题简化
我们只需要找到一组不相交的「好区间」(满足上述条件且长度 ≥ 2),使得这些区间覆盖的学生总数最大。
3. 动态规划解法
定义 为前 个学生中最多能通过的人数。
状态转移:
- 不选择第 个学生通过:
- 选择以 结尾的区间 通过:如果 是好区间,则
4. 寻找好区间
对于每个 ,我们需要找到所有满足条件的 :
- 区间 的长度 ≥ 2
5. 优化方法
使用单调栈维护当前的最大值:
- 维护两个栈分别存储 和 的递减序列
- 当区间 满足 时,该区间就是好区间
- 对于每个 ,找到最小的 使得 是好区间,然后更新 DP 值
6. 算法流程
- 初始化 DP 数组为 0
- 维护两个单调栈用于快速查询区间最大值
- 遍历每个学生 :
- 更新单调栈
- 找到包含 的好区间
- 更新 DP 值
- 最终答案为
复杂度分析
- 暴力 DP:,适用于
- 优化后:,使用单调栈和双指针技巧
关键点总结
- 理解作弊操作:区间内所有人获得区间最大值
- 识别好区间:区间 的最大值 ≥ 区间 的最大值
- 动态规划:选择最优的区间组合最大化通过人数
- 单调栈优化:快速计算区间最大值
这种解法能够高效处理 的大数据规模。
- 1
信息
- ID
- 4787
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者