HDU-2037 B 今年暑假不AC
来源:互联网 发布:淘宝erp软件哪个好 编辑:程序博客网 时间:2024/04/27 20:01
今年暑假不AC
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Problem Description
“今年暑假不AC?”
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%...”
确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%...”
确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)
Input
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
Output
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
Sample Input
121 33 40 73 815 1915 2010 158 186 125 104 142 90
Sample Output
5
Author
lcy
————————————————————焦急的分割线————————————————————
思路:这道题目,是所谓的不相交区间的问题。贪心法。其实一上来就应该想到那样做。
我们来分析一下:首先我们需要选择第一个节目。怎么选择才是最明智的决策呢?最早开始?最短耗时?最早结束?但是我们知道,要选择尽量多的区间。那么问题变成了每做一次选择,都尽量使得剩下的时间能够选更多的区间。
现在,最早结束的我们最优先考虑。现在区间按照结束时间从早到晚进行了排序。
下一步,考虑最不值得的选择。假如选择一个区间,它却包含了更短耗时的区间,那就是奢侈的。因此,作出筛选,使得开始时间单调递增。
最后要考虑区间不能相交。后一个节目的开始时间必须在当前节目结束之后。回过头来,最后两步可以归结为一步。只需要不相交这个条件即可。
代码如下:
————————————————————焦急的分割线————————————————————
思路:这道题目,是所谓的不相交区间的问题。贪心法。其实一上来就应该想到那样做。
我们来分析一下:首先我们需要选择第一个节目。怎么选择才是最明智的决策呢?最早开始?最短耗时?最早结束?但是我们知道,要选择尽量多的区间。那么问题变成了每做一次选择,都尽量使得剩下的时间能够选更多的区间。
现在,最早结束的我们最优先考虑。现在区间按照结束时间从早到晚进行了排序。
下一步,考虑最不值得的选择。假如选择一个区间,它却包含了更短耗时的区间,那就是奢侈的。因此,作出筛选,使得开始时间单调递增。
最后要考虑区间不能相交。后一个节目的开始时间必须在当前节目结束之后。回过头来,最后两步可以归结为一步。只需要不相交这个条件即可。
代码如下:
#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>struct ti{ int Start; int End;}time[110];int comp(const void *a, const void *b){ return (*(ti *)a).End - (*(ti *)b).End;}//结构体一级排序,按照结束时间从小到大排序int main(){ int n, cou; int i, j; while(scanf("%d", &n)!=EOF&&n){ cou = 1; for(i = 0; i < n; i++) scanf("%d%d", &time[i].Start, &time[i].End); qsort(time, n, sizeof(ti), comp); for(i = 0,j = 1; j < n; j++){ if(time[j].Start >= time[i].End){ cou++;//下一个节目在当前节目结束后开始 i = j;//更新当前节目 }//否则看下下一个节目 } printf("%d\n", cou); }return 0;}
0 0
- HDU-2037 B 今年暑假不AC
- hdu 2037 今年暑假不AC 贪心
- HDU - 2037 今年暑假不AC
- HDU 2037 - 今年暑假不AC
- HDU 2037 今年暑假不AC
- HDU 2037 今年暑假不AC
- HDU 2037 今年暑假不AC
- hdu 2037 今年暑假不AC
- HDU 2037 今年暑假不AC
- HDU 2037 今年暑假不AC (贪心)
- hdu 2037 今年暑假不AC
- hdu 2037 今年暑假不AC
- HDU 2037 今年暑假不AC
- hdu 2037 今年暑假不AC
- hdu 2037 今年暑假不AC
- hdu 2037 今年暑假不AC 贪心
- HDU 2037 今年暑假不AC
- HDU 2037 今年暑假不AC
- 总结—2014.03.15
- java错误与异常自我理解
- 人工智能与机器学习著名会议
- Eclipse逆向工程插件ModelSpoon,由代码轻松生成UML图
- 在VM10中ubuntu 12.10的安装及安装后的设置
- HDU-2037 B 今年暑假不AC
- strlen和sizeof的区别。
- 让你提前认识软件开发(4):破除几个有关软件开发的错误观念
- #ifndef#define#endif的用法(整理)
- Eclipse和MyEclipse相关的快捷键
- GStreamer基础教程06——媒体格式和pad的Capabilities
- Java中静态导入
- Codeforces 13C
- [模拟水题&&中位数]uva10041 Vito's Family