贪心算法之会场安排

Posted 柳小茶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法之会场安排相关的知识,希望对你有一定的参考价值。

题目描述

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个算法进行安排。

测试样例

输入

5(活动数目)
1 23 (1是开始时间,23是结束时间)
12 28
25 35
27 80
36 50

输出

 3

分析:

贪心算法 满足局部最优解即可

会场安排满足:

上一个 结束的时间 < 下一个 开始的时间   ---- (1)

将所有时间的开始时间和结束时间分别放入 beg[],和 end[] 数组中存储 并均按升序排列

当出现 beg[i]>end[j]的时候说明 当前满足条件(1)可以在同一个会场进行 否则需要额外开会场

#include<iostream>
#include<algorithm>
using namespace std;
//只要满足当前下一个会议开始的时间是大于当前会议结束的时间即可
int main(){
    int k;
    cin>>k;
    int beg[k+1]={};
    int end[k+1]={};
    for(int i=0;i<k;i++){
        cin>>beg[i]>>end[i];
    }
    sort(beg,beg+k);//最小开始时间
    sort(end,end+k);//最早结束时间
    int n=0,j=0;
    for(int i=0;i<k;i++){
        if(beg[i]>end[j])//如果能正常进行下个(结束时间小于开始时间) 就继续
        j++;
        else //否则需要再开会场
        n++;
    }
    cout<<n<<endl;
}

 

 

 

 

 

 

 

 

 

以上是关于贪心算法之会场安排的主要内容,如果未能解决你的问题,请参考以下文章

suseoj 1210: 会场安排问题 (贪心)

会场安排问题

算法设计与分析贪心算法--活动安排问题

(转)贪心算法之精辟

[nyoj]会场安排问题-贪心

nyoj 14-会场安排问题 (贪心)