- 一边上课一边写题解,我真是个小天才。
- 链接在此。
- 同样是一本通蓝书模板题。
- 这道题其实前几天就打完了,就是拖到现在才写……
- 不扯别的了,进入正题。
分析
- 看到这道题的时候觉得有点眼熟,于是去翻了翻——
- 果然,和之前的【例6.5】活动选择简直一模一样,只是输入有点区别。
其实线段这道题也是一样的,不过要改数组大小啊!- 首先把所有活动按照结束时间排序,因为结束越早后面能排的活动越多(怎么感觉说了和没说一样)。
- 然后先确定选第一个,再从第二个开始循环,如果此活动的开始时间晚于(或等于)上一次确定的活动的结束时间,就更新结束时间,同时答案+1。
代码
#include<bits/stdc++.h>
using namespace std;
struct cyy{
int st,ed;
}a[1010];
bool cmp(cyy x,cyy y){
return x.ed<y.ed;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].st>>a[i].ed;
sort(a+1,a+n+1,cmp);
int t=a[1].ed,ans=1;
for(int i=2;i<=n;i++)
if(a[i].st>=t)
t=a[i].ed,ans++;
cout<<ans<<endl;
return 0;
}