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版权协议,转载请附上原文出处链接和本声明。