• 活动选择


    题目描述

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

    现在给出个活动使用礼堂的起始时间 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;
    }    
  • 相关阅读:
    利用cubieboard设置samba打印服务器
    CubieTruck上安装mjpg_streamer
    devexpress bandgridview使用总结(14.2)
    WeedFS0.6.8-引用库列表
    NSQ的消息订阅发布测试
    WeedFS问题收集
    WeedFS依赖库 0.6.1
    golang 前置补0
    MsChart<3> 饼状图
    在代码中去掉窗口,全屏显示
  • 原文地址:https://www.cnblogs.com/mrclr/p/8570581.html
走看看 - 开发者的网上家园