• 活动选择


    题目描述

    学校在最近几天有个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。

    现在给出个活动使用礼堂的起始时间 Bi 和结束时间 Ei(Bi < Ei),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。

     

    输入

    第一行一个整数 n(n<=1000);

    接下来的行,每行两个整数,第一个 Bi,第二个是 Ei(Bi< Ei <=32767)

     

    输出

    输出最多能安排的活动个数。

     

    样例输入

    11

    3 5

    1 4

    12 14

    8 12

    0 6

    8 11 

    6 10

    5 7

    3 8 

    5 9

    2 13

    样例输出

    4

    分析:每一个活动都有一个结束时间,所以我们只要想办法让这个活动尽可能早的结束,这样好余下更多的时间举办别的活动。

    所以我们只要按每一个活动的结束时间从小到大排序,然后选择在前一个活动结束后尽可能早开始的活动,这样选择出来的活动一定是最多的。

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define rep(i, a, n) for(int i = a; i <= n; ++i)
    #define per(i, n, a) for(int i = n; i >= a; --i)
    typedef long long ll;
    const int maxn = 1e3 + 5;
    
    struct Node
    {
        int sta, end;
        bool operator < (const Node& other)const
        {
            return end < other.end;
        }
    }a[maxn];
    int n, ans = 0;
    int fini = 0;    //记录当前最后一个活动的结束时间
    int main()
    {
        freopen("act.in", "r", stdin);
        freopen("act.out", "w", stdout);
        scanf("%d", &n);
        rep(i ,1, n) scanf("%d%d", &a[i].sta, &a[i].end);
        sort(a + 1, a + n + 1);
        rep(i, 1, n)
        {
            if(a[i].sta >= fini)
            {
                ans++;
                fini = a[i].end;
            }
        }
        printf("%d
    ", ans);
        return 0;
    }    
  • 相关阅读:
    PAT乙级题库“傻瓜”题解之跟奥巴马一起编程
    PAT乙级题库“傻瓜”题解之划拳
    PAT乙级题库“傻瓜”题解之数素数
    PAT乙级题库“傻瓜”题解之编程团体赛
    PAT乙级题库“傻瓜”题解之判断题
    PAT乙级题库“傻瓜”题解之输出PATest
    有始有终,后会无期。
    今日德语大学习
    【day
    [day 3] Deutsch Studie
  • 原文地址:https://www.cnblogs.com/mrclr/p/8570581.html
Copyright © 2020-2023  润新知