您的位置:首页 > 其它

hdu3697(贪心+暴力)

2015-08-12 16:56 316 查看
题意:

一个人要选课,现在给出每门课的选课开始时间和选课截止时间,这个人会每隔5分钟选一次课,问他最多可以选多少门课。

思路:

我们把没门课按结束时间从小到大排序,结束时间相同按开始时间从小到大排序,这样我们按顺序选一定是最优的。

由题意可知,这个人开始选课的时间只有可能是0,、1、2、3、4,因为他第一次选课的时间定了之后,以后的选课时间就固定了,所以暴力一下即可。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<climits>
#include<sstream>
#include<algorithm>

using namespace std;

const int maxn=500;

struct node
{
int l,r;
}a[maxn];

int cmp(node a,node b)
{
if(a.r==b.r)
return a.l<b.l;
return a.r<b.r;
}

int main()
{
int n;
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);

int ans=0;
sort(a,a+n,cmp);
int vis[maxn];
for(int s=0;s<5;s++)
{
memset(vis,0,sizeof vis);
int tmp=0;
for(int d=s;d<=a[n-1].r;d+=5)
{
for(int t=0;t<n;t++)
{
if(vis[t])
continue;
if(d>=a[t].l&&d<a[t].r)
{
vis[t]=1;
tmp++;
break;
}
}
}
ans=max(ans,tmp);
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: