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; }