HLG 1539 选课
题意: 知道了一些课程的开始和结束时间,要从中选择尽量多的课程,而且每五分钟只能选一次。
分析: 因为每五分钟最多选一次,所以只要枚举总的开始时间,以后的时间就可以确定,总的开始时间最多为 4 种情况,找到其中的最大值即可。
#include<stdio.h> #include<string.h> #include<stdlib.h> #define clr(x)memset(x,0,sizeof(x)) struct node { int st,en; }q[555]; int v[555]; int cmp(const void*p1,const void*p2) { node *c=(node*)p1; node *d=(node*)p2; if(c->en==d->en) return c->st-d->st; return c->en-d->en; } int main() { int n,i,j,k,tmp,res,s,u,tt; while(scanf("%d",&n)!=EOF) { if(n==0) break; for(i=0;i<n;i++) scanf("%d%d",&q[i].st,&q[i].en); qsort(q,n,sizeof(q[0]),cmp); res=0; for(i=0;i<5;i++) { tmp=0; memset(v,0,sizeof(v)); for(j=i;j<=q[n-1].en;j+=5) { for(k=0;k<n;k++) if(q[k].st<=j&&j<q[k].en&&(!v[k])) { v[k]=1; tmp++; break; } } if(tmp>res) res=tmp; } printf("%d\n",res); } return 0; }