P1803 凌乱的yyy / 线段覆盖
题目意思
- 有若干线段,可能重复也可能没有重复
- 如何挑选线段选择的线段最多。
- 挑选的线段不能重复
想法:
- 按照结束时间排序
- 如果下一段开始时间大于上一段时间的结束时间,那么就选取下一线段
- 如图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ymjakLAw-1591072340679)(…/…/…/…/%E5%9D%9A%E6%9E%9C%E5%90%8C%E6%AD%A5%E6%96%87%E4%BB%B6%E5%A4%B9/%E6%88%91%E7%9A%84%E5%9D%9A%E6%9E%9C%E4%BA%91/%E7%AE%97%E6%B3%95/greed/P1803%20%E5%87%8C%E4%B9%B1%E7%9A%84yyy%20%20%E7%BA%BF%E6%AE%B5%E8%A6%86%E7%9B%96.assets/1588299998369.png)]
代码:
#include <bits/stdc++.h>
using namespace std;
int n,cnt=1;
struct line{
int s,t;
}lines[1000010];
bool cmp(line l1,line l2){
return l1.t < l2.t;
}
int main(){
cin >> n;
for (int i = 1; i <=n; ++i) {
cin >> lines[i].s >> lines[i].t;
}
sort(lines+1,lines+1+n,cmp);
int temp = lines[1].t;
for (int i = 2; i <= n ; ++i) {
if(temp <= lines[i].s){
cnt++;
temp = lines[i].t;
}
}
cout << cnt;
return 0;
}