题目链接
点覆盖区间问题,问最少需要多少个点
先按开始区间进行排序,具体的贪心算法就是对于每个区间不断的和下一个区间判断是否有交集, 有的话再判断是否改变集合的边界。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1010;
int n;
struct Node{
int s,e;
}node[N];
bool cmp(Node a,Node b){
return a.s<b.s;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>node[i].s>>node[i].e;
}
sort(node,node+n,cmp);
int ans=0,t=-INF;
for(int i=0;i<n;i++){
if(node[i].s<=t) t=min(t,node[i].e);
else{
ans++;
t=node[i].e;
}
}
cout<<ans<<endl;
}