有n个需要在同一天使用同一个教室的活动a1, a2, …, an,教室同一时刻只能由一个活动使用。每个活动a[i]都有一个 开始时间s[i]和结束时间f[i]。一旦被选择后,活动a[i]就占据半开时间区间[s[i],f[i])。如果[s[i],f[i])和[s[j],f[j])互不重 叠,a[i]和a[j]两个活动就可以被安排在这一天。求使得尽量多的活动能不冲突的举行的最大数量。
本题解法的关键在于找到一个比较方法,让这个比较方法尽可能多的安排活动,而要使活动尽可能的多,则每次选择活动结束时间最早的即可
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct cmp{
bool operator()(vector<int>&a1, vector<int>&a2){
return a1[1] < a2[1];
}
};
int getNum(vector<vector<int>>events){
sort(events.begin(), events.end(), cmp());
int i = 0;
int num = 1;
for (int j = 1; j < events.size(); j++){
if (events[j][0] >= events[i][1]){
num++;
i = j;
}
}
return num;
}