题目描述
思路分析
利用贪心算法,把结束时间最早的放在最前面,这样留给后面的时间就越多,能进行的个数也越多,这样就很简单了,通过结构体sort排序,把结束时间早的放在前面,遍历判断当前活动能不能进行,也就是当前开始时间要大于上一个结束时间(初值设置为负数)
#include<bits/stdc++.h>
using namespace std;
struct act{
int index;
int start;
int end;
};
vector<act> Act;
vector<act> res;
int n;
int lastTime = -1;
bool cmp(act act1,act act2)
{
return act1.end<act2.end;
}
int main()
{
cin>>n;
for(int i = 1;i<=n;i++)
{
int x,y;
cin>>x>>y;
act act1;
act1.index = i;
act1.start = x;
act1.end = y;
Act.push_back(act1);
}
sort(Act.begin(),Act.end(),cmp);
for(auto x : Act)
{
if(x.start>=lastTime)
{
res.push_back(x);
lastTime = x.end;
}
}
for(auto x : res)
{
cout<<"选取活动"<<x.index<<":"<<"["<<x.start<<","<<x.end<<")"<<endl;
}
cout<<"选取个数为"<<res.size();
return 0;
}