对课程结束时间由小到大进行排序,之后直接暴力枚举。
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=300+5;
struct node{
int start,end;
};
node a[maxn];
bool vis[maxn];
bool cmp(node a,node b){
if(a.end==b.end)
return a.start<b.start;
return a.end<b.end;
}
int main(){
//freopen("a.txt","r",stdin);
int n;
while(~scanf("%d",&n)){
int max=0;
if(n==0)
break;
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].start,&a[i].end);
sort(a,a+n,cmp);
for(int i=0;i<5;i++){
int temp=0;
memset(vis,false,sizeof(vis));
for(int j=i;j<a[n-1].end;j+=5){
for(int k=0;k<n;k++)
if(vis[k]==false && j>=a[k].start && j<a[k].end){
vis[k]=true;
temp++;
break;
}
}
//cout<<temp<<endl;
if(temp>max)
max=temp;
}
printf("%d\n",max);
}
return 0;
}