Selecting courses(hdu 3697 贪心
Posted ydw--
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
以上是关于Selecting courses(hdu 3697 贪心的主要内容,如果未能解决你的问题,请参考以下文章