輸入格式:
第一行輸入活動數目n(0<n<100);
以後輸入n行,分别輸入序号為1到n的活動使用中心的開始時刻a與截止時刻b(a,b為整數且0<=a<b<24,a,b輸入以空格分隔)。
輸出格式:
輸出最佳安排序列所包含的各個活動(按照活動被安排的次序,兩個活動之間用逗号分隔),如果有多個活動安排序列符合要求輸出字典序最小的序列。最後輸出最佳安排序列所包含的活動數。
輸入樣例:
6
8 10
9 16
11 16
14 15
10 14
7 11
輸出樣例:
#include<stdio.h>
//因為要先對活動的截止時刻進行排序,是以一個活動的開始時刻和截止時刻應該放在一個結構體裡,這樣才能保證某個活動的截止時刻移動時,它的開始時刻還是相對應的
struct activity
{
int begin;
int end;
int select;
int num;
}a[101],t;
int main()
{
int n;
int i,j;
int s=0;
int x=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&a[i].begin,&a[i].end);
a[i].num=i+1;
a[i].select=0;
}
//将各個活動的截止時刻按升序排列
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j].end>a[j+1].end)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<n;i++)
{
if(a[i].begin>=s)
{
a[i].select=1;
s=a[i].end;
}
}
printf("%d",a[0].num);
for(i=1;i<n;i++)
{
if(a[i].select==1)
{
printf(",%d",a[i].num);
x++;
}
}
printf("\n");
printf("最佳安排所包含的活動數為%d場",x+1);
return 0;
}