1. 问题
有 n 项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果
任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最
多
2. 解析
把活动按截止时间从小到大排序,然后从前往后挑选,只要与前面选的活动相容,就可以选入
其他策略:
(1)按开始时间从小到大排序
(2)按活动占用时间从小到大排序
3. 设计
t = 0;
for (i = 0; i < n; i++) {
if (A[i].start >= t) {
A[i].choose = true;
t = A[i].finish;
}
}
4. 分析
选择活动的部分,算法复杂度为O (n)
5. 源码
https://github.com/tangsongbbb/AlgorithmsLearning/blob/master/作业10/10.1.c