输入n 活动个数
以后n行每行两个数,活动开始时间,活动结束时间
求最多安排多少活动,活动的时间不能发生重叠
11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
证明出 要活动最多 需要 end尽量早;
代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
struct act
{
int start;
int end;
}a[100000];
bool cmp(act a, act b)
{
return a.end < b.end;
}
int greedy_activity_selector()
{
int num = 1, i = 0;
for(int j = 1; j < n; j++)
{
if(a[j].start > a[i].end )
{
i = j;
num++;
}
}
return num;
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
{
scanf("%d %d",&a[i].start,&a[i].end);
}
sort(a,a+n,cmp);
int res = greedy_activity_selector();
cout << res <<endl;
return 0;
}