HDU 3697--贪心+暴力

来源:互联网 发布:阿里云专有网络 编辑:程序博客网 时间:2024/06/10 00:00

题意:

选课问题,给出可以选择的课程的开始时间和结束时间,他每隔5分钟会选一次课,问他最多能够选多少节课。


输入:

21 104 50

输出:

2

分析:

贪心,将所有课程的结束时间从小到大排序,如果课程的结束时间相同,就按照开始时间从小到大排序,这样的顺序一定是最解。

由题意可以看出来,选课的时间只可能是0~4,第一次选课时间定出来之后,以后的时间就会被定出来,所以直接暴力一次就好了。


代码:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{    int be,en;    bool operator <(const node &r)const    {        if(en==r.en)            return be<r.be;        else            return en<r.en;    }} m[500];int n;int vis[500];int main(){    while(~scanf("%d",&n)&&n)    {        memset(vis,0,sizeof(vis));        for(int i=0; i<n; i++)            scanf("%d%d",&m[i].be,&m[i].en);        int ans=0;        sort(m,m+n);        for(int s=0; s<5; s++)        {            memset(vis,0,sizeof vis);            int tmp=0;            for(int d=s; d<=m[n-1].en; d+=5)            {                for(int t=0; t<n; t++)                {                    if(vis[t])                        continue;                    if(d>=m[t].be&&d<m[t].en)                    {                        vis[t]=1;                        tmp++;                        break;                    }                }            }            ans=max(ans,tmp);        }        printf("%d\n",ans);    }    return 0;}



0 0
原创粉丝点击