1.问题
相容问题:有一个礼堂需要用于举办活动,每个活动有开始时间与结束时间;如果任何两个活动不能在礼堂中同时进行,问如何选择这些活动,使得能在礼堂中安排最多活动
2.解析
3.设计
void greedy(struct A* a,int n,int ap[]){
sort(a+1,a+1+n,cmp);
ap[1]=1;
int j=1;//记录最新纳入计划的活动的序号
int count=1;//记录有几个活动纳入计划
for(int i=2;i<=n;i++){
if(a[i].s>=a[j].e){//若当前活动与已纳入的最新活动兼容,则纳入计划
ap[++count]=i;
j=i;
}
}
for(int i=1;i<=count;i++){
printf("%d ",ap[i]);
}
printf("\n");
}
4.分析
O(nlogn)