会场安排问题

来源:互联网 发布:西安行知中学李依桐 编辑:程序博客网 时间:2024/04/29 13:00

问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排

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

结果输出:最少会场数。

例:5

        1    23

        12  28

        25  35

        27  80

        36  50

输出  3

代码:

#include<iostream>
using namespace std;
void main()
{
int n,m,endtime,*b,*e,*time,i,result;//n存放活动个数,m存放各次循环的次数,endtime存放所有活动的最晚结束时间,
                                    //b[]存放各活动最早开始使用的时间段,即开始时间+1,c[]存放各活动最晚使用的时间段,即结束时间
                                    //time[]存储活动重叠数,result为求解答案,最少会场
cin>>n;
m=n;
b=new int[n];
e=new int[n];
while(m--)
{
cin>>b[m]>>e[m];
b[m]++;
}
m=n;
endtime=b[0];
while(m--)     //求出最晚结束时间
if(endtime<e[m])
endtime=e[m];
time=new int[endtime+1];//以最晚结束时间创建time[]
m=endtime+1;
while(m--)
time[m]=0;//time[]置零
m=n;
while(m--)
for(i=b[m];i<=e[m];i++)//求time[]
time[i]++;
m=endtime+1;
result=0;
while(m--)//求time[]中最大数,即result
if(result<time[m])
result=time[m];
cout<<result<<endl;
system("pause");
}

0 0