您的位置:首页 > 其它

2073活动选择问题

2017-08-07 17:25 295 查看
活动选择问题

Problem Description

sdut 大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。

Input

输入包括多组输入,每组输入第一行为申请的活动数n(n<100),从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;

Output

输出每天最多能举办的活动数。

Example Input

12
15 20
15 19
8 18
10 15
4 14
6 12
5 10
2 9
3 8
0 7
3 4
1 3


Example Output

5


解题思路

只要各个活动时间段没有公共区间,我们就说它们兼容。该问题就是要找出一个由互相兼容的活动组成的最大子集。各项活动按照结束时间单调递增排序,进行求解即可。

代码

#include <stdio.h>
#include <stdlib.h>
struct activity{
int b;
int e;
}act[101],temp;
int main()
{
int n,b,e,i,j,max=0,count,flag;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%d %d",&act[i].b,&act[i].e);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(act[i].e>act[j].e)
{
temp=act[i];
act[i]=act[j];
act[j]=temp;
}
}
}
int cont=1;
flag=act[0].e;
for(i=1;i<n;i++)
{
if(act[i].b>=flag)
{
cont++;
flag=act[i].e;
}
}
printf("%d\n",cont);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: