本题可以转化成最多不重叠区间覆盖问题,要想使最多,就要对右区间从小到大排序,然后要对左区间进行特判,找出第一个左边界大于等于上一个区间的右边界的区间作为下一个区间。
#include<bits/stdc++.h>
using namespace std;
int n;
const int M=1005;
struct node{
int s,f;
bool operator<(const node &a)const{
return f<a.f;
}
}a[M];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].f;
}
sort(a+1,a+1+n);
int point=1;
int ans=1;
for(int i=2;i<=n;i++){
if(a[i].s>=a[point].f){
ans++;
point=i;
}
}
cout<<ans<<endl;
return 0;
}