会场安排问题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。)
对于给定的k个待安排的活动,计算使用最少会场的时间表。
对于给定的k个待安排的活动,计算使用最少会场的时间表。
输入
输入数据的第一行有1 个正整数k(k≤10000),表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动开始时间和结束时间。时间以0 点开始的分钟计。
输出
输出一个整数,表示最少会场数。
示例输入
5 1 23 12 28 25 35 27 80 36 50
示例输出
3
#include<stdio.h>
#include<stdlib.h>
struct node
{
int begin,end;
}a[10001],b[10001];
int cmp(const void *a,const void *b)
{
return (*(struct node *)a).begin>(*(struct node *)b).begin?1:-1;
}
int main()
{
int i,j,n,m,k,t,l;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d %d",&a[i].begin,&a[i].end);
qsort(a,n,sizeof(a[0]),cmp);
k=1;
b[0]=a[0];
for(i=1;i<n;i++)
{
t=0;
for(j=0;j<k;j++)
{
if(a[i].begin>=b[j].end)
{
t=1;
b[j]=a[i];
break;
}
}
if(t==0)
b[k++]=a[i];
}
printf("%d\n",k);
}