• 1803 凌乱的yyy


    难度:普及-

    题目类型:贪心

    提交次数:1

    涉及知识:贪心,排序

    题目背景

    快noip了,yyy很紧张!

    题目描述

    现在各大oj上有n个比赛,每个比赛的开始、结束的时间点是知道的。

    yyy认为,参加越多的比赛,noip就能考的越好(假的)

    所以,他想知道他最多能参加几个比赛。

    由于yyy是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛。

    输入输出格式

    输入格式:

    第一行是一个整数n ,接下来n行每行是2个正整数ai,bi(ai<bi),表示比赛开始、结束的时间。

    输出格式:

    一个整数最多参加的比赛数目。

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int n;
     5 struct act{
     6     int start;
     7     int end;
     8 }a[100010];
     9 bool com(act a, act b){
    10     return a.end<b.end;
    11 }
    12 int main(){
    13     cin>>n;
    14     int i;
    15     for(i = 0; i < n; i++)
    16         cin>>a[i].start>>a[i].end;
    17     sort(a, a+n, com);
    18     int ans = 1;
    19     int temp = a[0].end;
    20     for(i = 0; i < n; i++)
    21         if(a[i].start>=temp){
    22             ans++;
    23             temp = a[i].end;
    24         }
    25     cout<<ans;
    26     return 0;
    27 } 

    备注:

    典型的活动安排类贪心问题,借机复习一下。按照结束时间从早到晚排序,选第一个,然后选不和上一个结束时间冲突的。怎么证明这是最优的呢?我觉得挺谜的。。看到有一个解释似乎有点道理:尽可能为后面腾出更多时间进行选择。。大概可以说服一下自己。注意ans初始化为1,因为第一个要选上。

  • 相关阅读:
    事务
    排序算法
    二维数组中的查找
    在Linux中安装Matlab
    null和“”的区别
    【学习笔记】〖九度OJ〗题目1433:FatMouse
    【学习笔记】〖九度OJ〗题目1464:Hello World for U
    year:2017 month:8 day:1
    year:2017 month:07 day:31
    year:2017 month:7 day:27
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/5933685.html
Copyright © 2020-2023  润新知