题目:click~
题意:给你n门课程,每门课程告诉你的选课的起始时间和结束时间(左闭右开)。
做法:对右端点排序,贪心
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cstring>
using namespace std;
struct Node
{
int l,r;
}a[500];
int cmp(Node x,Node y)
{
if(x.r==y.r)
return x.l<y.l;
return x.r<y.r;
}
int N;
int vis[500];
int main()
{
while(scanf("%d",&N)!=EOF)
{
if(N==0) break;
for(int i=0;i<N;i++)
{
scanf("%d %d",&a[i].l,&a[i].r);
}
sort(a,a+N,cmp); //printf("maxn = %d\n",maxn);
//for(int i=0;i<N;i++) printf("%d %d lr\n",a[i].l,a[i].r);
int tot,ans = 0;
//int temp;
for(int s=0;s<5;s++)
{
memset(vis,0,sizeof(vis)); tot=0;
for(int i=s;i<=a[N-1].r;i+=5)
{
for(int j=0;j<N;j++)
{
if(vis[j]) continue;
if(a[j].l<=i&&a[j].r>i) {tot++;vis[j] =1; break;}
}
}
ans = max(ans,tot);
}
printf("%d\n",ans);
}
return 0;
}