要尽可能的多看节目,那么就要每一步都选择结束时间最短的,这样就可以留下尽可能多的时间去看别的节目。
因此也就是将各个节目的结束时间从早到晚排好序。
然后依次判断节目是否可以观看:
①当前节目是否已经开始,如果开始了,就接着寻找下一个还没开始的节目。
然后更新当前的时间为找到的节目的截止时间。
- #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;
- }