您的位置:首页 > 其它

Selecting courses HDU - 3697 贪心 思维

2017-04-28 16:59 399 查看
题目: 学生只能每隔5分钟选一次课,并且每次只能选一次课,求最多选多少次课。

分析:  对 0 1 2 3 4 这五个时间段进行枚举, 对于每一个时间,一定要选课程结束时间最早的,这样使得该课程占用可选的的时间点最少。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 1e3+10;

struct node {
int l,r;
};
node data
;
bool cmp( node a,node b )
{
if ( a.r==b.r ) return a.l<b.l;
return a.r<b.r;
}
int vis
;
int main()
{
int t;
int ans,now,tans;

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