贪心算法
贪心算法章节入口:每一步选择当前看起来最优的方案,再用交换论证等工具证明它能导出全局最优解。
贪心的核心是:每一步都做出当前看起来最优的选择,并保证这个局部选择不会破坏全局最优。本章从基础模型出发,配合相邻交换、交换论证等典型证明手法展开。
章节内容
经典例题
下面两题都是「按端点排序 + 用堆维护最紧迫的候选」的区间贪心,区别在于题目要求的匹配方向不同。
| 题目 | 贪心模型 | 关键点 |
|---|---|---|
| luogu-P2859 题解 | 区间调度:用最少的互不重叠容器装下所有区间 | 按左端点升序处理区间,用小根堆维护每个容器当前的结束时间。堆顶是全场最早空出来的容器,当前区间的左端点不小于它就直接复用,否则新开一个;答案等于同一时刻的最大重叠区间数。 |
| luogu-P2887 题解 | 区间点覆盖:每个区间匹配一个落在区间内的点,点带容量 | 把点按坐标升序扫描,用堆维护左端点已经到达的区间,按右端点从小到大出堆。先满足右端点最小的区间,因为它最快过期;已经过期的区间直接丢弃。 |
两题的堆都承担同一件事:在任意时刻,从所有“还来得及”的候选中挑出“最快失效”的那个。