hdu3697(贪心+暴力)
2015-08-12 16:56
316 查看
题意:
一个人要选课,现在给出每门课的选课开始时间和选课截止时间,这个人会每隔5分钟选一次课,问他最多可以选多少门课。
思路:
我们把没门课按结束时间从小到大排序,结束时间相同按开始时间从小到大排序,这样我们按顺序选一定是最优的。
由题意可知,这个人开始选课的时间只有可能是0,、1、2、3、4,因为他第一次选课的时间定了之后,以后的选课时间就固定了,所以暴力一下即可。
代码:
一个人要选课,现在给出每门课的选课开始时间和选课截止时间,这个人会每隔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; }
相关文章推荐
- mac系统不同java版本切换
- c/c++中const使用总结(金典)
- [Leetcode] Next Permutation
- js获取自定义属性值
- JavaScript的jQuery库插件的简要开发指南
- STM8L探索套件学习笔记-EXTI外部中断
- 原生JS开发酷炫版飞机大战源码下载仅此一家
- 内存管理、copy、深浅拷贝
- FFMpeg 常用命令格式转换,视频合成
- 冒泡排序及改进(C++版)
- SQL Server CONVERT() 函数用不同的格式显示日期/时间数据
- 修改zabbix为中文,并解决乱码问题
- DevExpress15.1.5破解—— 延长试用期
- iphone inline video fragments
- 智渔课堂官方免费教程三十六:Java数据结构之双向链表结构
- spring - ws Endpoint
- Activity被回收导致fragment的getActivity为null的解决办法
- sublime ubuntu
- 侧滑删除进阶(六)
- SSM整合