【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?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*% ...
随机推荐
- ThreadLocal 验明正身
一.前言 之前ThreadLocal使用不多,有个细节也就注意不到了:ThreadLocal在多线程中到底起什么作用?用它保存的变量在每个线程中,是每个线程都保存一份变量的拷贝吗?带着这些问题,我查了 ...
- jquery/js iframe 元素操作
1.判断id/ class 是否存在? <script> $(function(){ if(("#id_name").length()>0){ //如果id 存在 ...
- AGC017D Game on Tree(树型博弈)
题目大意: 给出一棵n个结点的树,以1为根,每次可以切掉除1外的任意一棵子树,最后不能切的话就为负,问是先手必胜还是后手必胜. 题解: 首先我们考虑利用SG函数解决这个问题 如果1结点有多个子节点,那 ...
- c# IList<T> 深拷贝
class A { public string a1{get;set}; public string a2{get;set}; public IList<B> a3{get;set}; / ...
- taotao单点登录的用户Controller、service(注册、登录、验证是否登录方法)
接口文档: 1.1. 注册接口 1.1.1. 检查数据是否可用 请求方法 GET URL http://sso.taotao.com/user/check/{param}/{type} 参数说明 格式 ...
- ubuntu下使用sudo 出现unable to resolve host 解决方法
Linux 环境, 假设这台机器名字叫dev(机器的hostname), 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host dev虽然sudo 还是可以正 ...
- 7月20号day12总结
今天学习过程和小结 先进行了复习,主要 1,hive导入数据的方式有 本地导入 load data [local] inpath 'hdfs-dir' into table tablename; s ...
- 公共css
* { margin: 0; padding: 0; word-break: break-all; font-family: Microsoft YaHei, tahoma, arial, Hirag ...
- oracle 数据库图形化工具 sqldeveloper
1. 安装完成Oracle数据库,点击左下角[开始]菜单,在所有程序中打开[Oracle] 2. 在开始菜单,展开Oracle数据库,安装文件,然后打开[应用程序开发].可以看到[sqldevelop ...
- Shell之基本用法
一:shell简介 1.什么是shell shell的中文意思是“外壳”,通俗地讲,shell是一个交互编程接口,通过获得用户输入来驱动操作系统内核完成指定工作.shell除了作为命令解释程序以外,还 ...