问题描述:给定x轴上n个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。
给定n个闭区间,编程计算去掉的最少的比区间个数。
数据输入:第一行是正整数n,表示闭区间的个数,接下来的n行中,每行有两个整数,分别表示闭区间的两个端点。
结果输出:计算出的去掉的最少闭区间数。
输出示例;
3
10 20
10 15
20 15
输出示例:
2
//if(a>b)swap(a,b)
// 按右端点从小到大排序;
// 依左端点超过右端点进行选择
代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct interval{
int start;
int end;
};
bool cmp(interval a,interval b){
if(a.end<b.end) return true;
else return false;
}
int GreedySelector(int n,interval inte[])
{
int count=1;
int j=0;
for(int i=1;i<n;i++){
if(inte[i].start>inte[j].end){
count++;j=i;
}
}
return count;
}
int main()
{
int n;
int a,b;
cin>>n;
interval inte[100];
for(int i=0;i<n;i++){
cin>>a>>b;
if(a>b)swap(a,b);
inte[i].start=a;
inte[i].end=b;
}
sort(inte,inte+n,cmp);
cout<<n-GreedySelector(n,inte)<<endl;
return 0;
}
运行截图: