2073活动选择问题

来源:互联网 发布:沈阳淘宝代运营 编辑:程序博客网 时间:2024/05/29 08:06

活动选择问题


Problem Description

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

Input

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

Output

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

Example Input

1215 2015 198 1810 154 146 125 102 93 80 73 41 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;}