• 看电视(区间贪心)


     

    看电视

    题目描述

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

    输入

    输入包含多组测试数据。每组输入的第一行是一个整数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

    样例输出

     5

    经典区间贪心,区间不相间问题:给出N个开区间,从中选取尽可能多的开区间,使其两两没有交集

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 struct Time{
     8     int x;
     9     int y;
    10 }T[100];
    11 
    12 bool cmp(Time a,Time b)
    13 {
    14     if(a.x!=b.x)
    15         return a.x>b.x;
    16     else return a.y<b.y;
    17 }
    18 
    19 int main()
    20 {
    21     int n;
    22     while(~scanf("%d",&n)&&n)
    23     {
    24         for(int i=0;i<n;i++)
    25         {
    26             scanf("%d %d",&T[i].x,&T[i].y);
    27         }
    28         sort(T,T+n,cmp);
    29         int num=1;
    30         int lastx=T[0].x;
    31         for(int i=1;i<n;i++)
    32         {
    33             if(T[i].y<=lastx)
    34             {
    35                 num++;
    36                 lastx=T[i].x;
    37             }
    38         }
    39         printf("%d
    ",num);
    40         
    41     }
    42     return 0; 
    43 }

    与之类似的是区间选点问题:给出N个闭区间,求最少需要确定多少个点,才能使每个闭区间中都至少存在一个点

    区间选点问题只需要把区间不相交问题中的T[i].y<=lastx改为T[i].y<lastx即可,可以思考一下为什么

  • 相关阅读:
    win7 下 qwt安装教程
    qt里标识操作系统的宏
    qt 获取系统磁盘空间大小
    qwt总结1
    debian创建apt-proxy代理
    在Linux使用mingw32来编写win32程序
    Linux环境变量的修改(永久,暂时)
    debian7 oracle11g 解决 link binaries 错误方案
    l​i​n​u​x添加​修​改​用​户​名​密​码
    HOWTO install Oracle 11g on Ubuntu Linux 12.04 (Precise Pangolin) 64bits
  • 原文地址:https://www.cnblogs.com/jiamian/p/11165130.html
Copyright © 2020-2023  润新知