问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排
数据输入:第一行有一个正整数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");
}