您的位置:首页 > 其它

南阳理工966 选择不相交区间

2015-07-23 10:11 253 查看


选择不相交区间

时间限制:1000 ms  |  内存限制:65535 KB
难度:2

描述

  好吧。这道题的目的在于让大家认识贪心问题的三个区间经典问题:区间选点问题,区间覆盖问题,以及该题的选择不相交区间问题。有许多的贪心问题可以转化为这三类的问题。

  那么,对于该问题。就是给一系列的区间,求最多的区间,要求区间个数最多,这些区间不相交,需要注意的是这些区间都是闭区间。



输入第一行一个数n为区间个数(n<=1000)

接下来有n行,每行有两个数a,b分别为区间的两个端点,a,b在int范围。

EOF结尾。
输出输出如样例所示
样例输入
2
1 10
10 11
3
1 10
10 11
11 20


样例输出
Case 1:
1.
Case 2:
2.

分析

这个题是典型的徐泽不相交区间问题,我提交错了好多次,开始是因为没有判断两个端点的大小

后来加上了代码却没有放在for循环里,做了好几个小时,才把这道题给A了

01.
#include<stdio.h>


02.
#include<algorithm>


03.
using
 
namespace
 
std;


04.
struct
 
S


05.
{


06.
int
 
a,b;


07.
}
t[1010];


08.
int
 
cmp(S
a,S b)


09.
{


10.
if
(a.b==b.b)


11.
return
 
a.a<b.a;


12.
else


13.
return
 
a.b<b.b;


14.
}


15.
int
 
main()


16.
{


17.
int
 
n,i,j=1;


18.
while
(
scanf
(
"%d"
,&n)!=EOF)


19.
{


20.
int
 
s=1,k;


21.
for
(i=0;
i<n; i++)


22.
{
scanf
(
"%d
%d"
,&t[i].a,&t[i].b);


23.
if
(t[i].a>t[i].b)


24.
{


25.
k=t[i].a;


26.
t[i].a=t[i].b;


27.
t[i].b=k;


28.
}


29.
}


30.
sort(t,t+n,cmp);


31.
k=t[0].b;


32.
for
(i=1;
i<n; i++)


33.
if
(t[i].a>k)


34.
{


35.
s++;


36.
k=t[i].b;


37.
}


38.
printf
(
"Case
%d:\n%d.\n"
,j++,s);


39.
}


40.
return
 
0;


41.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: