HLG 1539 选课

题意: 知道了一些课程的开始和结束时间,要从中选择尽量多的课程,而且每五分钟只能选一次。

分析: 因为每五分钟最多选一次,所以只要枚举总的开始时间,以后的时间就可以确定,总的开始时间最多为 4 种情况,找到其中的最大值即可。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define clr(x)memset(x,0,sizeof(x))
struct node
{
    int st,en;
}q[555];
int v[555];
int cmp(const void*p1,const void*p2)
{
    node *c=(node*)p1;
    node *d=(node*)p2;
    if(c->en==d->en)
        return c->st-d->st;
    return c->en-d->en;
}
int main()
{
    int n,i,j,k,tmp,res,s,u,tt;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
           break;
        for(i=0;i<n;i++)
            scanf("%d%d",&q[i].st,&q[i].en);
        qsort(q,n,sizeof(q[0]),cmp);
        res=0;
        for(i=0;i<5;i++)
        {
            tmp=0;
            memset(v,0,sizeof(v));
            for(j=i;j<=q[n-1].en;j+=5)
            {
                 for(k=0;k<n;k++)
                    if(q[k].st<=j&&j<q[k].en&&(!v[k]))
                    {
                        v[k]=1;
                        tmp++;
                        break;
                    }
            }
            if(tmp>res)
                res=tmp;
        }
        printf("%d\n",res);
    }
    return 0;
}

 

posted @ 2012-08-19 22:13  'wind  阅读(187)  评论(0编辑  收藏  举报