#include<string.h>
#include<stdlib.h>
#include <algorithm>
#include<iostream>
using namespace std;
struct node{
int l,r;
}a[110];
int cmp(node x1, node x2)
{
return x1.r < x2.r;
}
int main(){
freopen("1214.in","r",stdin);
freopen("1214.out","w",stdout);
int n,tot=0,x,y,k=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&x,&y);
if(x>=y) { a[i].l=y;a[i].r=x; }//保证先后顺序
else { a[i].l=x;a[i].r=y; }
}
sort(a, a+n, cmp);
int maxx=-1100000;
for(int i=0;i<n;i++){
if(a[i].l>=maxx){
maxx=a[i].r;
tot++;
}
}
printf("%d",tot);
return 0;
}
题解:贪心,对所有区间的右端从小到大进行排序,排序后第一个区间必取。每次判断上一个取的区间的右段是否大于本次判断的左端,是则取,并刷新最大右端。