思路:要求出最大解集,可以将所有活动按照结束时间从小到大排序,然后遍历一遍所有活动,只要当前活动开始时间不小于上一活动结束时间便可加入集合中。这样求出的最大解集只是可行的最大解集的其中一种。
代码实现如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct activity
{
int s;
int f;
};
bool sort_by_f(const activity& a, const activity& b) {
return a.f < b.f;
}
int main() {
vector<activity> a;
activity b;
int n, start, finish;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> start >> finish;
b.s = start;
b.f = finish;
a.push_back(b);
}
sort(a.begin(), a.end(), sort_by_f);
int finish_time = a[0].f;
int count = 1;
for (int i = 1; i < a.size(); i++) {
if (a[i].s >= finish_time) {
count++;
finish_time = a[i].f;
}
}
cout << count << endl;
}