问题描述:
假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。
编程任务:
对于给定的k个待安排的活动,编程计算使用最少会场的时间表。
数据输入:
由文件或键盘给出输入数据。第一行有1 个正整数k,表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动开始时间和结束时间。时间以0 点开始的分钟计。
结果输出:
将编程计算出的最少会场数及各会场中的活动编号输出到文件或屏幕。
参考代码如下:
#include<stdio.h>
#include<algorithm>
#define N 5
using namespace std;
struct node{
int begin;
int end;
};
int cmp(node a,node b){
return a.end<b.end;
}//升序排列
int main(){
int n,m,endtime,j,i;
int count=0;
scanf("%d",&n);
int *flag = (int*)malloc(n*sizeof(int));
struct node *act = (struct node*)malloc(n*sizeof(struct node));
for(i=0;i<n;i++){
scanf("%d%d",&act[i].begin,&act[i].end);
}
sort(act,act+n,cmp);
m=n;
while(m){
count++;
i=0;
while(flag[i])
i++;
endtime=act[i].end;
flag[i]=1;
m--;
for(j=i+1;j<n;j++){
if(flag[i]){
continue;
}
if(act[j].begin>=endtime){
flag[j]=1;
m--;
endtime=act[j].end;
}
}
}
// for(int i=0;i<n;i++){
// printf("%d\t%d\n",act[i].begin,act[i].end);
// }
printf("%d",count);
return 0;
}