【hdoj_2037】今年暑假不AC
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2037
可以这样理解题意:将每个节目看做是一个区间,起始时间为左右端点,待求的是:最多可以有多少个区间互不相交(注意:[3,5]和[5,7]虽有共同的端点,但是是不相交的).
思路:所选择的区间长度(节目时间长短)越小,余下的空余区间就越多,所以长度小的区间,应该先被选中.因此,步骤如下:
step1.对所有的区间按照区间长度递增的顺序排序.
step2.依次考察每个区间,看看这个区间与已经选中的区间是否相交,如果都不相交,则这个区间被选中,否则不能选择这个区间.以此类推,直至考察完所有区间.
例如,题目中的一个例子,解答如下图
C++代码如下:
#include<iostream>
#include<algorithm>
using namespace std; struct TV//结构体
{
int s;
int e;
}; bool cmp(TV tv1,TV tv2)//作为sort函数的一个参数,以便进行结构体排序
{ //这个函数决定了排序的原则:按照节目时间递增排序 ——贪心
return tv1.e-tv1.s < tv2.e - tv2.s;
} int main()
{
int n;
while(1)
{
cin >> n;//节目总数
if(n==0)
break;
TV * tv = new TV[n];
for(int i=0;i<n;i++)
cin >> tv[i].s >> tv[i].e;//节目起始时间
sort(tv,tv+n,cmp);//排序,根据cmp函数可知,是按照节目时间长短递增排序的
int * IndexOfOk = new int[n];//被选中要看的节目下标
int NumOfOk = 0;//被选中要看的节目个数
for(int i=0;i<n;i++)//针对每个节目
{ //看看是否可以被选中,原则是不与已经选中的节目的时间冲突
int ok = 1;
for(int k=0;k<NumOfOk;k++)//IndexOfOk[0~NumOfOk-1]记录了已经选中的节目的下标
if(!(tv[IndexOfOk[k]].s>=tv[i].e || tv[i].s>=tv[IndexOfOk[k]].e))// 如果时间冲突
{
ok = 0;
break;
}
if(ok)//如果ok=1,表明节目i与已经选中的所有的节目都不冲突,则可以加入它们
IndexOfOk[NumOfOk++] = i;//记录下它的下标,并且数目++
}
cout << NumOfOk << endl;
}
return 0;
}
注意:上述代码提交会出现错误提示,删掉所有的注释再提交,可以通过.
总结:
1.结构体的使用不必过于复杂,写上数据成员即可.
2.sort()中的函数参数决定了如何排序.
3.注意中IndexOfOK[]数组的用法.
【hdoj_2037】今年暑假不AC的更多相关文章
- 今年暑假不AC
"今年暑假不AC?""是的.""那你干什么呢?""看世界杯呀,笨蛋!""@#$%^&*%...&quo ...
- hdu 2037 今年暑假不AC
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 今年暑假不AC[HDU2037]
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- E - 今年暑假不AC
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- 题目1434:今年暑假不AC (项目安排类:结束时间快排,判断开始时间)
题目描述: “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视作为 ...
- hdu 2037 今年暑假不AC (java)
问题: 此题为贪心算法入门,思路是先将各个时间段依照结束时间进行排序(按结束越早遍历.节目愈多), 再从第一个节目開始,假设下一节目開始时间大于上一节目的開始时间则进行该节目.依次递推. 输入时,要求 ...
- HDU 2037 今年暑假不AC (贪心)
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdoj 2037 今年暑假不AC
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)
J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64 ...
- 九度OJ 1434 今年暑假不AC
题目地址:http://ac.jobdu.com/problem.php?pid=1434 题目描述: “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*% ...
随机推荐
- PM所该学习的
最近第二阶段实在大家都是大一大二,面临的考试很多也很难,很多时候就开始松懈了下来.可是做事情就是需要效率和时间,慢慢地,也开始懈怠了下来. 作为pm,首先自己必须比组员先了解云笔记的各种进程,做好沟 ...
- POI 导入 一直报400问题
排查过程:1.400一般都是参数或者请求不对,但是我这个情况是本地好用,只是服务器有问题,所以排除了传值的格式等问题. 2.服务器和本地网络隔离,所以没办法比较代码,分两次全量覆盖了html和js部分 ...
- 在虚拟机安装 Linux 系统(菜鸡级别)
处理器数量看个人 剩下按照推荐的配置选择就OK 启动客户端 -> Enter进入 /为其它盘./Boot为根目录 可不勾选
- 批处理之SET命令
除了 下面分别介绍: 表示第二个字符到倒数第三个字符的值
- 如何优雅的使用iBatis
1 使用命名空间2 每张表一个sqlmaps文件3 创建resultMap与parameterMap4 常用的sql创建<sql>片段5 尽量遵循ORM原则设计domain对象
- Session接口常用方法
org.hibernate.Session接口 beginTransaction 开启事务 clear 清缓存 close 关闭session connection - 过时 获取Connection ...
- LeetCode--Reverse Linked List(Java)
相似题目: Palindrome Number Valid PalinDrome Reverse Linked List Palindrome Linked List 翻转单链表(要注意的是是否含有头 ...
- [luogu2617]Dynamic Rankings
题面在这里 description 动态区间第\(k\)大 data range \[n,m\le 10000,a_i,t\le 1e^9\] solution 前置技能:主席树,静态区间第\(k\) ...
- 【BZOJ 3232】圈地游戏 二分+SPFA判环/最小割经典模型
最小割经典模型指的是“一堆元素进行选取,对于某个元素的取舍有代价或价值,对于某些对元素,选取后会有额外代价或价值”的经典最小割模型,建立倒三角进行最小割.这个二分是显然的,一开始我也是想到了最小割的那 ...
- [USACO08DEC] 秘密消息Secret Message
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...