step by step.
目录
题目:
Description
给定x轴上n个闭区间,去掉尽可能少的闭区间,使剩下的闭区间都不相交。 注意:这里,若区间与另一区间之间仅有端点是相同的,不算做区间相交。 例如,[1,2]和[2,3]算是不相交区间。输入格式
第一行一个正整数n(n<=50),表示闭区间数。 接下来n行中,每行2个整数,表示闭区间的2个整数端点。输出格式
输出去掉的最少的闭区间数。输入样例
3 10 20 10 15 12 15输出样例
2提示
这个问题基本等同于书本的活动安排问题。
参考:
思路:
可以把一个区间做成一个struct,存储区间的开始点和结束点,按照活动安排问题算法——首先排序,然后选择。
!注:排序要重写cmp方法,按照结束时间f的非减序列——
bool cmp(area a,area b)
{
return a.f<b.f;
}
代码:
#include <iostream>
#include<algorithm>
using namespace std;
struct area
{
int s;
int f;
};
bool cmp(area a,area b)
{
return a.f<b.f;
}
int main()
{
int n;
cin>>n;
int count=1;
area t[n];
for(int i=0; i<n; i++)
{
cin>>t[i].s;
cin>>t[i].f;
}
sort(t,t+n,cmp);
int j=0;
for(int i=1; i<n; i++)
{
if(t[i].s>=t[j].f)
{
count++;
j=i;
}
}
cout<<n-count;
}