HDOJ 3697 Selecting courses (贪心)

分析:只需枚举4个起始时间即可,确定起始时间后,后面的时间就都确定了,求最大值时,利用贪心策略,每次都选结束时间最早的。

题中说的时间不会超过1000,貌似数据中有大于1000的,被坑了……

View Code
#include <stdio.h>

#include <string.h>

#include <algorithm>

using namespace std;

#define N 300

struct node

{

    int x,y;

    bool operator<(const node &t)   const

    {

        return y<t.y;

    }

};

int n;

node t[N];

void read()

{

    for(int i=0;i<n;i++)

    {

        scanf("%d%d",&t[i].x,&t[i].y);

    }

}

int cal(double x)

{

    bool vis[N];

    memset(vis,0,sizeof(vis));

    int ret=0;

    for(double d=x;d<1000;d+=5)

    {

        for(int i=0;i<n;i++)    if(!vis[i])

        {

            if(d>t[i].x && d<t[i].y)

            {

                ret++;

                vis[i]=1;

                break;

            }

        }

    }

    return ret;

}

void solve()

{

    sort(t,t+n);

    int ans=0;

    for(double d=0.5;d<5;d+=1)

    {

        ans=max(ans,cal(d));

    }

    printf("%d\n",ans);

}

int main()

{

    while(scanf("%d",&n),n)

    {

        read();

        solve();

    }

    return 0;

}

你可能感兴趣的:(select)