解题思路:
就是很经典的贪心问题,其实我们发现可以选择的活动的个数主要取决于活动的截止时间而非开始时间,所以我们只需要按照截止时间对这些活动进行排序,然后如果下一个活动的开始时间大于等于前面的截止时间就可以活动数量加一,并且更新截止时间,这样最后得到的解一定是最优解。
下面附上ac代码
#include <bits/stdc++.h>
using namespace std;
int n;
struct Node{
int begin;
int end;
}a[1010];
bool cmp(Node a,Node b)
{
return a.end<b.end;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].begin>>a[i].end;
}
sort(a+1,a+1+n,cmp);
int ans=1;
int END=a[1].end;
for(int i=2;i<=n;i++)
{
if(a[i].begin>=END){ //还是不要忘记等于号
ans++;
END=a[i].end;
}
}
cout<<ans<<endl;
//system("pause");
return 0;
}