问题:给定n个开区间,选择尽可能多的区间,使得这些开区间两两之间没有交集。
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 110;
struct inteval{
int x, y;
}in[maxn];
bool cmp(inteval a, inteval b){
if(a.x != b.x) return a.x > b.x;
else return a.y < b.y;
}
int main(){
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d%d",&in[i].x,&in[i].y);
}
sort(in, in+n, cmp);
int ans = 1, lastx = in[0].x;
for(int i = 1; i < n; i++){
if(in[i].y <= lastx){
ans++;
lastx = in[i].x;
}
}
printf("%d",ans);
return 0;
}
问题2:给定n个闭区间,求最少需要确定多少个点,才能使每个闭区间中都至少存在一个点。
该问题只需要把上述代码的“in[i].y <= lastx”改成“in[i].y < lastx”即可。