题目: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的更多相关文章

  1. 今年暑假不AC

    "今年暑假不AC?""是的.""那你干什么呢?""看世界杯呀,笨蛋!""@#$%^&*%...&quo ...

  2. hdu 2037 今年暑假不AC

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. 今年暑假不AC[HDU2037]

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  4. E - 今年暑假不AC

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Des ...

  5. 题目1434:今年暑假不AC (项目安排类:结束时间快排,判断开始时间)

    题目描述: “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视作为 ...

  6. hdu 2037 今年暑假不AC (java)

    问题: 此题为贪心算法入门,思路是先将各个时间段依照结束时间进行排序(按结束越早遍历.节目愈多), 再从第一个节目開始,假设下一节目開始时间大于上一节目的開始时间则进行该节目.依次递推. 输入时,要求 ...

  7. HDU 2037 今年暑假不AC (贪心)

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. hdoj 2037 今年暑假不AC

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  9. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

  10. 九度OJ 1434 今年暑假不AC

    题目地址:http://ac.jobdu.com/problem.php?pid=1434 题目描述: “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*% ...

随机推荐

  1. 建议 里面的sql查找单列 外面的sql查找所有列 这样方便查找数据

  2. hdu 1053 Entropy (哈夫曼树)

    Entropy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. SDOI 2009 学校食堂 状压dp

    这个题的关键处1 紧跟着他的bi个人 —— 由此得出任意一个状态都可以表示为 有第一个人没吃到饭做分隔的前面所有人已吃饭,并用1<<8表示之后的(包括他)的八个人的状态2 信息仍然是上一个 ...

  4. jocky1.0.3 (原joc) java混淆器 去除jdk版本限制

    昨晚下班回去,研究了下jocky1.0.3的使用,发现编译时提示引用类库版本不对,捣弄了半个小时后终于理解,原来是我的jdk1.7版本过高,这货是06年的版本,到现在都没更新过,支持(限制)的最高版本 ...

  5. HDU 1203 01背包

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. CMDB资产管理系统开发【day26】:02-数据写入待存区

    一.资产自动回报数据及个更新流程图 二.表结构注释(NewAssetApprovalZone) class NewAssetApprovalZone(models.Model): "&quo ...

  7. GoogleMap在js中的应用

    <html> <head> <meta name="viewport" content="initial-scale=1.0, user-s ...

  8. 网络编程:connect函数

    TCP客户用connect函数来建立与TCP服务器的连接: cpp #include<sys/socket.h> int connect(int sockfd, const struct ...

  9. 我们用CloudStack做什么

    原文地址:http://www.sdfengxi.com/?p=376 我想很多同学会有类似的疑问,就是我配置好了CloudStack或者OpenStack之类的环境之后能够提供什么服务或者应用呢?下 ...

  10. linux认证上网

    公司上网需要认证,linux命令行模式:curl -d "opr=pwdLogin&userName=用户名&pwd=密码&rememberPwd=1" h ...