算法实现题4-1会场安排问题

4-1会场安排问题

问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相当于要找的最小会场数。)

算法设计:对于给定的k个待安排的活动,计算使用最少会场的时间表。

数据输入:第1行有1个正整数k,表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动的开始时间和结束时间。时间以0点开始的分钟计。

输入样例:

5
1 23
12 28
25 35
27 80
36 50

结果输出:输出最少会场数

输出样例:

3

贪心策略:

将开始时间和结束时间分别存入begin[],end[]数组中,并按升序排序

当下一个会场的开始时间>上一个会场的结束时间,即begin[i]>end[j],可以在同一个会场进行 ,否则需要额外开会场

AC码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
   int k;
   cin >> k;
   int begin[1000];      //记录会议的开始时间 
   int end[1000];        //记录会议的结束时间
   for(int i=0;i<k;i++)
   {
   		cin >> begin[i] >> end[i];	
   } 
   sort(begin,begin+k);    //最早开始时间 
   sort(end,end+k);        //最早结束时间 
   int count=0,j=0;
   for(int i=0;i<k;i++)
   {
   		if(begin[i]>end[j])
   			j++;
   		else
   			count++;
    } 
    cout << count;
    return 0;
}

 

 


版权声明:本文为m0_50759850原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。