题目大意:
有n个线段,问最多能放多少个不重叠的线段。
解题思路:
右端点从小到大排序,我们每次尽可能地放右端点小的线段,能放就放(即不重叠)就可以了,为什么这样可行呢?因为右端点比较小更可能留有位置放其它区间。
废话:
好久没做贪心题了,这种区间题应该能反应过来需要考虑左,右或者区间长度这三个信息,然后再构建算法。另外,所谓贪心,每一步所做的都可以理解为 为最后的全局最优做准备(QAQ 我也不知道自己讲了什么)
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
vector<pair<int,int>> mv;
for(int i=0;i<n;i++){
int a,b;cin>>a>>b;
mv.push_back(make_pair(b,a));
}
sort(mv.begin(),mv.end(),less<pair<int,int>>());
int lsr;int sum=0;
for(int i=0;i<(int)mv.size();i++){
if(!i){
lsr=mv[0].first;
++sum;
continue;
}
if(mv[i].second<lsr)continue;
lsr=mv[i].first;
sum++;
}
cout<<sum<<endl;
return 0;
}