您的位置:首页 > 其它

HDU 3697--贪心+暴力

2016-08-04 21:26 381 查看
题意:

选课问题,给出可以选择的课程的开始时间和结束时间,他每隔5分钟会选一次课,问他最多能够选多少节课。

输入:

2
1 10
4 5
0


输出:

2


分析:

贪心,将所有课程的结束时间从小到大排序,如果课程的结束时间相同,就按照开始时间从小到大排序,这样的顺序一定是最解。

由题意可以看出来,选课的时间只可能是0~4,第一次选课时间定出来之后,以后的时间就会被定出来,所以直接暴力一次就好了。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

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