输入格式:

第一行输入活动数目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

输出样例:

1,5,4

最佳安排包含的活动数为3场


#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;
}