zoukankan      html  css  js  c++  java
  • HDOJ2037(贪心)

    ProblemDescription

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

    确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
    作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)

     

     

    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 18

    6 12

    5 10

    4 14

    2 9

    0

     

     

    Sample Output

    5

    分析:用begin[i]和end[i]表示事件i的开始和结束时刻,则题目要求找一个最长的序列a1<a2<...<an满足

    begin[a1]<end[a1]<...<begin[an]<end[an]

    按结束时间从小到大排序即可。

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    using namespace std;
    struct list
    {
    	int x;
    	int y;
    }time[101];
    int cmp(list a, list b)
    {
    	return a.y < b.y;
    }
    int main()
    {
    	int n;
    	while (scanf("%d",&n)!=EOF&&n)
    	{
    		for (int i = 0; i < n; i++)
    			scanf("%d%d", &time[i].x, &time[i].y);
    		sort(time, time + n, cmp);
    		int j = 0, num = 1;
    		for (int i = 1; i < n; i++)
    		{
    			if (time[i].x >= time[j].y)
    			{
    				num++;
    				j = i;
    			}
    		}
    		printf("%d
    ", num);
    	}
    	return 0;
    }


  • 相关阅读:
    音视频入门-06-代码画图时间
    音视频入门-05-RGB-TO-BMP使用开源库
    音视频入门-04-BMP图像四字节对齐的问题
    音视频入门-03-RGB转成BMP图片
    控制input文本框只能输入正整数(H5)
    微信小程序自定义导航栏配置(顶部栏搜索框)
    React-日历组件(原生JS代码)
    package.json文件详解
    解决HTML5IOS拍照上传图片逆时针旋转90度问题(React)
    项目细节
  • 原文地址:https://www.cnblogs.com/nickqiao/p/7583419.html
Copyright © 2011-2022 走看看