【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?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*% ...
随机推荐
- postman工具【接口自动化测试关于断言】
在使用postman工具进行接口自动化时我们经常需要断言来进行判断,结果到底是成功还是失败. 但在collection runner/Newman里如果不加断言,跑完后都无法知道是成功还是失败 断言是 ...
- PhoneGap & HTML5 学习资料网址
PhoneGap 与 Application Cache应用缓存 http://www.html5cn.org/forum.php?mod=viewthread&tid=40272 加速We ...
- Apache服务器的Options 的 Indexes FollowSymLinks详解
禁止显示Apache目录列表 - Indexes FollowSymLinks 如何修改目录的配置以禁止显示 Apache 目录列表. 缺省情况下如果你在浏览器输入地址: http://localho ...
- phpquery中文手册
[简介] phpQuery是一个基于PHP的服务端开源项目,它可以让PHP开发人员轻松处理DOM文档内容.更有意思的是,它采用了jQuery的思想,使得可以像使用jQuery一样处理页面内容,获取想要 ...
- oracle补充
索引 索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据的I/O次数,因此可以显著的提高性能 创建索引的SQL 把下面表中的na ...
- BZOJ4373 算术天才⑨与等差数列(线段树)
看上去很难维护,考虑找一些必要条件.首先显然最大值-最小值=k*(r-l).然后区间内的数需要模k同余.最后区间内的数两两不同(k=0除外).冷静一下可以发现这些条件组合起来就是充分的了. 考虑怎么维 ...
- P4754 True Vegetable
题目描述 小A现在有 NN 道题,编号为 1,2,\cdots,N1,2,⋯,N .每道题的起始毒瘤程度为 00 或 11 .在每回合,小A可以将编号连续的 KK 道题的毒瘤程度+1.但小B因为本身比 ...
- P2874 [USACO07FEB]新牛棚Building A New Barn
题目描述 After scrimping and saving for years, Farmer John has decided to build a new barn. He wants the ...
- BZOJ1513 [POI2006]Tet-Tetris 3D 【二维线段树】
题目链接 BZOJ1513 题解 真正地理解了一波线段树标记永久化的姿势 每个节点维护两个值\(v\)和\(tag\) \(v\)代表儿子中的最值 \(tag\)代表未下传的最值 显然节点的区间大于等 ...
- POJ2155 Matrix 【二维线段树】
题目链接 POJ2155 题解 二维线段树水题,蒟蒻本想拿来养生一下 数据结构真的是有毒啊,, TM这题卡常 动态开点线段树会TLE[也不知道为什么] 直接开个二维数组反倒能过 #include< ...