看电视(贪心算法)

问题 A: 看电视

时间限制: 1 Sec  内存限制: 32 MB
提交: 927  解决: 432
[提交][状态][讨论版][命题人:外部导入]

题目描述

暑假到了,小明终于可以开心的看电视了。但是小明喜欢的节目太多了,他希望尽量多的看到完整的节目。
现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗?

输入

输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示小明喜欢的节目的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
当n=0时,输入结束。

输出

对于每组输入,输出能完整看到的电视节目的个数。

样例输入

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0

样例输出

5code:

/*算法:使用贪心算法,时间按照开始时间从小到大的顺序排列,
*如果开始时间相同,那么按照结束时间从小到大的顺序排列。之
*后使用lastTV保留上一个最优解,如果下一个区间的开始时间大
*于lastTV的结束时间,那么更新lastTV,直至所有区间被遍历完
*/
#include <iostream>
#include <algorithm>


/*节目结构*/
struct program {
int si, ei;
};
program TV[1000];


bool cmp(program a, program b) {
if (a.ei != b.ei)
{
return a.ei < b.ei; //返回开始时间小的
}
else
{
return a.si < b.si; //返回结束时间小的
}
}
int main()
{
using namespace std;


int n;


while (cin >> n)
{
if (!n)
{
break;
}


for (int i = 0; i < n; i++)
{
cin >> TV[i].si >> TV[i].ei;
}


/*根据开始时间从小到大排序,如果相等,那么结束时间小的在前*/
sort(TV, TV + n, cmp);


/*for (int i = 0; i < n; i++)
{
cout << TV[i].si <<" "<< TV[i].ei<<endl;
}*/


int lastTV = TV[0].ei, count = 1;
//cout << lastTV<<endl;
for (int i = 1; i < n; i++)
{
if (TV[i].si >= lastTV)
{
count++;
lastTV = TV[i].ei;
}
}
cout << count << endl;


}


// system("pause");
return 0;
}

 

原文地址:https://www.cnblogs.com/yangyalong/p/10610278.html

时间: 2024-11-12 22:55:01

看电视(贪心算法)的相关文章

hdu 2037 今年暑假不AC (看电视贪心)

表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示.n=0表示输入结束,不做处理.求最多看的电视数目 将电视按结束时间排序,遍历电视开始时间是否小于 记录的上个电视的结束时间 1 for(int i = 1 ; i < n ; i ++){ 2 if(tv[i].s >= endtime){ 3 cnt++; 4 endtime = tv[i].e; 5 }

从 活动选择问题 看动态规划和贪心算法的区别与联系

这篇文章主要用来记录我对<算法导论> 贪心算法一章中的“活动选择问题”的动态规划求解和贪心算法求解 的思路和理解. 主要涉及到以下几个方面的内容: ①什么是活动选择问题---粗略提下,详细请参考<算法导论> ②活动选择问题的DP(Dynamic programming)求解--DP求解问题的思路 ③活动选择问题的贪心算法求解 ④为什么这个问题可以用贪心算法求解? ⑤动态规划与贪心算法的一些区别与联系 ⑥活动选择问题的DP求解的JAVA语言实现以及时间复杂度分析 ⑦活动选择问题的Gr

贪心算法——Huffman 压缩编码的实现

1. 如何理解 "贪心算法" 假设我们有一个可以容纳 100 Kg 物品的背包,可以装各种物品.我们有以下 5 种豆子,每种豆子的总量和总价值都各不相同.怎样装才能让背包里豆子的总价值最大呢? 这个问题其实很简单,我们只需要计算出每种豆子的单价,然后按照单价从高到低依次来装就好了.单价从高到低排列为:黑豆.绿豆.红豆.青豆和黄豆,因此我们往背包里装 20 Kg 黑豆.30 Kg 绿豆和 50 Kg 红豆. 实质上,这就是贪心算法的思想,用贪心算法解决问题的步骤一般是这样的. 第一步,当

数据结构与算法简记--贪心算法

贪心算法 贪心算法问题解决步骤 第一步,当我们看到这类问题的时候,首先要联想到贪心算法:针对一组数据,我们定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大. 第二步,我们尝试看下这个问题是否可以用贪心算法解决:每次选择当前情况下,在对限制值同等贡献量的情况下,对期望值贡献最大的数据. 第三步,我们举几个例子看下贪心算法产生的结果是否是最优的. 贪心算法实战分析 分糖果:有 m 个糖果和 n 个孩子.要把糖果分给这些孩子吃,但是糖果少,孩子多(m<n),所以糖果只能分配

贪心算法选择不相交区间

Input 输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示.n=0表示输入结束,不做处理. Output 对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行. Sample Input 12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8

【算法】贪心算法_节目时间安排问题

问题描述 “今年暑假不学习?” “是吗?那你打算干什么呢?” “看电视剧呀!” “那么多电视剧你看得完吗?” "对哦,那是的好好安排一下节目了." 确实如此,暑假来了,假期档的电视剧也来了,估计很多电视迷会抛开学业,奔向电视. 作为电视迷,一定想看在一天内看尽量多的完整的电视剧.当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事).流淌的美好时光.长安十二时辰.陈情令,以及王小丫的<开心辞典>等等,假设你已经知道了所有你喜欢看的电视

贪心算法的简述与示例

贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯.能够用贪心算法求解的问题一般具有两个重要特性:贪心选择性质和最优子结构性质. 参考:http://babybandf.blog.163.com/blog/static/61993532010112923767/ [例1]删数问题[B][/B] 试题描

算法导论——lec 13 贪心算法与图上算法

之前我们介绍了用动态规划的方法来解决一些最优化的问题.但对于有些最优化问题来说,用动态规划就是"高射炮打蚊子",采用一些更加简单有效的方法就可以解决.贪心算法就是其中之一.贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解. 一. 活动选择问题 [问题]对几个互相竞争的活动进行调度:活动集合S = {a1, a2, ..., an},它们都要求以独占的方式使用某一公共资源(如教室),每个活动ai有一个开始时间si和结束时间fi ,且0 ≤ si &

贪心算法

一,贪心算法的设计思想 ? 从问题的某一个初始解出发逐步逼近给定的目标,每一步都作一个不可回溯的决策,尽可能地求得最好的解.当达到某算法中的某一步不需要再继续前进时,算法停止. 二,贪心算法的基本性质 1)贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到.这是贪心算法可行的第一个基本要素,也是贪心法与动态规划法的主要区别. 2) 最优子结构性质 该问题解的整体最优性依赖于其局部子问题解的最优性.这种性质是可以采用贪心算法解决问题的关键特征.例如