题目链接如下:
最开始先想到让最早开始的活动先进行,但是如果最早开始的活动最晚结束就不满足题目要求,所以为了防止这种情况出现,我们可以采取最早结束的活动最早开始。当然,如果两个活动结束的时间都一样,存在在哪一个活动最早开始问题,但是这个问题可以不用去考虑,因为我们是以最早结束的活动为选择依据的。
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1500;
struct node
{
int beginTime;
int endTime;
node()
{
beginTime=0;
endTime=0;
}
}a[maxn];
bool cmp(node a,node b)
{
if(a.endTime!=b.endTime) /*如果两个活动的结束时间不相等*/
return a.endTime<b.endTime;
if(a.endTime==b.endTime)
return a.beginTime<b.beginTime;
}
int main()
{
int n,i;
cin>>n;
for(i=1; i<=n; i++)
{
cin>>a[i].beginTime>>a[i].endTime;
}
sort(a+1,a+1+n,cmp);
int cnt=0;
int tmp=-1;/*用于进行贪心选择的变量*/
for(i=1; i<=n; i++)/*进行活动选择 */
{
if(a[i].beginTime >= tmp)
{
tmp=a[i].endTime;
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}