Selecting courses(hdu 3697 贪心

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3697

 因为每隔5分钟选一次 那么枚举0-4就可以 5-1000 都可以由0-4加5加5得到

然后就是题目说可以在非整数点的时候开始 那我们就枚举0.0001,1.0001,2.0001,3.0001,4.0001

这样肯定比枚举0-4可以选择的要多

so 我们for(i=0 to 4)

j=i to 1000 每次加5

一个时间段开始的时间要是<=j并且结束时间>j 那就可以选上 (因为假设现在i是从0 开始 实际上是代表0.0001 所以开始的时间是0的这个时间段可以选上 但是结束的时间必须>0 )

代码;

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int s,t;
}a[305];
bool cmp(node x,node y)
{
    if(x.t!=y.t)return x.t<y.t;
        return x.s<y.s;
}
int main()
{
    int n,i,j;
    while(scanf("%d",&n),n)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&a[i].s,&a[i].t);
        }
        sort(a,a+n,cmp);
        int maxx=0;
        for(i=0;i<=4;i++)//假设从0.001开始 即i=0
        {
            int visit[305];
            int ans=0;
            memset(visit,0,sizeof(visit));
            for(j=i;j<=1000;j+=5)
            {
                for(int k=0;k<n;k++)
                {
                    if(visit[k]==0&&a[k].s<=j&&a[k].t>j)//那么这里的a【k】.s就可以等于j(j是从i来的,每次加5)
                    {
                        visit[k]=1;
                        ans++;
                        break;
                    }
                }
            }
            maxx=max(maxx,ans);
        }
        cout<<maxx<<endl;
    }
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/ydw--/p/11371369.html
今日推荐