zoukankan      html  css  js  c++  java
  • 活动选择

    活动选择

    题目描述

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

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

    输入

      第一行一个整数n(n<=1000); 接下来的n行,每行两个整数,第一个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

     这是《算法导论》上的例子,也是一个非常经典的问题。有n个需要在同一天使用同一个教室的活动a1,a2,…,an,教室同一时刻只能由一个活动使用。每个活动ai都有一个开始时间si和结束时间fi 。一旦被选择后,活动ai就占据半开时间区间[si,fi)。如果[si,fi]和[sj,fj]互不重叠,ai和aj两个活动就可以被安排在这一天。该问题就是要安排这些活动使得尽量多的活动能不冲突的举行。例如下图所示的活动集合S,其中各项活动按照结束时间单调递增排序。

    考虑使用贪心算法的解法。为了方便,我们用不同颜色的线条代表每个活动,线条的长度就是活动所占据的时间段,蓝色的线条表示我们已经选择的活动;红色的线条表示我们没有选择的活动。
    如果我们每次都选择开始时间最早的活动,不能得到最优解:

    如果我们每次都选择持续时间最短的活动,不能得到最优解:

    可以用数学归纳法证明,我们的贪心策略应该是每次选取结束时间最早的活动。直观上也很好理解,按这种方法选择相容活动为未安排活动留下尽可能多的时间。这也是把各项活动按照结束时间单调递增排序的原因。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    struct node{
        int begin;
        int end;
    };
    bool cmp(const node& a,const node&b){
        return a.end<b.end;
    }
    
    int main(){
        int n;
        cin>>n;
        node * p = new node[n];
        for (int i = 0; i < n; i++)
        {
            cin>>p[i].begin>>p[i].end;
        }
        sort(p,p+n,cmp);
        node before=p[0];
        int ans=1;
        for (int i = 1; i < n; i++)
        {
            if (p[i].begin>=before.end)
            {
                ans++;
                before= p[i];
            }
        }
        cout<<ans<<endl;
    }

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13681591.html

  • 相关阅读:
    csrf 跨站请求伪造
    apache 根据端口访问配置
    对于表单中单双引号问题
    svn常用命令
    urlencode和rawurlencode的区别
    php 显示某一个时间相当于当前时间在多少秒前,多少分钟前,多少小时前
    javaweb基础(24)_jsp一般的标签开发
    javaweb基础(23)_jsp自定义标签
    javaweb基础(22)_Servlet+JSP+JavaBean实战登陆
    javaweb基础(21)_两种开发模式
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13681591.html
Copyright © 2011-2022 走看看