题目链接:http://bailian.openjudge.cn/practice/4151/
题意:贪心算法,按照结束时间排序,优先选择结束时间早的,并且判断是否时间重合
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
struct point {
int start,end;
point(int a,int b){
start=a;
end=b;
}
point(){
}
};point all[105];
bool set[10005];
bool compare(point a,point b){
return a.end<b.end;
}
int main(){
int tmp;
cin>>tmp;
int size=0;
while(tmp!=0){
int a,b;
size=0;
for(int i=0;i<10005;i++){
set[i]=false;
}
for(int i=0;i<tmp;i++){
cin>>a>>b;
all[i]=point(a,b);
}
sort(all,all+tmp,compare);
for(int i=0;i<tmp;i++){
bool flag=false;
for(int j=all[i].start+1;j<all[i].end;j++){
if(set[j]){
flag=true;
break;
}
}
if(!flag){
for(int j=all[i].start;j<=all[i].end;j++){
set[j]=true;
}
size++;
}
}
cout<<size<<endl;
cin>>tmp;
}
}