【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?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*% ...
随机推荐
- beta版本冲刺三
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- const在c/c++中的区别
#include <iostream> using namespace std; int main() { ; ; }; ; i < sizeof array / sizeof *a ...
- .Net 面试总结
今天去面试了一家公司,做电子商务类的网站的,公司的老板应该比较有能量,可以同时拿下若干项目,技术负责人给提了几个问题: 记不清顺序了 .net 构析函数的作用 泛型的主要作用及应用方面 结构与类的区别 ...
- 从零开始配置Jenkins(二)——常见问题及排错思路
[前言] 一年多以前就听说Jenkins了,那时知道是它可以完成自动构建,感觉蛮强大的.后来,很多人都说它很恶心.最近,公司需要搭建新的服务器,小编就负责从头开始配置并且发布部署成功每一条线每一个项目 ...
- element-ui的el-tabel组件怎么使用type=“expand”实现表格嵌套并且在子表格没有数据的时候隐藏展开按钮
效果如下: 试过很多种办法,思路都在怎么控制<el-table-column type="expand">里面的type上,比如使用v-show等等,但是发现,要不就是 ...
- Delphi 之 编辑框控件(TEdit)
TEdit 组件主要用于数据的输入和显示和编辑等操作. AutoSelect 获取组件焦点.该属性只能在单行文本组件使用.值为True为选中.false则不选中. BorderStyle 设置编辑框控 ...
- jquery中ajax的使用(java)
AJAX方式 js:界面 var prjContextPath='<%=request.getContextPath()%>'; $(document).ready(function() ...
- 解决Git无法同步空文件夹的问题
思路:在每个空文件夹下创建空文件,同步后再删除 package org.zln.module1.demo1; import org.apache.log4j.Logger; import java.i ...
- (age|name|sex)+ 脱离顺序控制 并且能添加多个
(age|name|sex)+ 脱离顺序控制 并且能添加多个
- 几个JQuery解析XML的程序例子
用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 第一种方案: <script ty ...