0x00 题目地址
0x01 分析
要尽可能的多看节目,那么就要每一步都选择结束时间最短的,这样就可以留下尽可能多的时间去看别的节目。
因此也就是将各个节目的结束时间从早到晚排好序。
然后依次判断节目是否可以观看:
①当前节目是否已经开始,如果开始了,就接着寻找下一个还没开始的节目。
然后更新当前的时间为找到的节目的截止时间。
0x02 完整代码
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
struct programe {
int id;
int startTime;
int endTime;
programe(int id, int startTime, int endTime) :id(id), startTime(startTime),endTime(endTime){}
};
bool compare_pro(programe A, programe B) {
return A.endTime < B.endTime;
}
// 测试函数
int main() {
int n = 0;
while (cin >> n) {
vector<programe> case_vector(n);
int startTime = 0;
int endTime = 0;
for (int i = 0; i < n; i++) {
cin >> startTime >> endTime;
programe temp(i, startTime, endTime);
case_vector.push_back(temp);
}
sort(case_vector.begin(),case_vector.end(),compare_pro);
int currentTime = 0;
int count = 0;
for (int i = 0; i < n; i++) {
if (case_vector[i].startTime >= currentTime) {
count++;
currentTime = case_vector[i].endTime;
}
}
cout << count << endl;
}
return 0;
}