解题思路:这是典型的贪心算法问题,即不考虑总体而注重局部最优解,
我共分三个步骤来解题,首先如何将时间表输入程序,再就是要对时间表进行排序,在这里我是将结束时间作为基准去从小到大排序,最后再通过贪心算法,依次遍历寻找合适的活动,输出。
#include <stdio.h>
main()
{
int arr[2][100];
int n;
int i,j,end,temp;
int k = 0;
int add = 1;
scanf("%d",&n);
//第一步:数据导入
for(i = 0;i < 2;i++){
for(j = 0;j < n;j++){
scanf("%d",&arr[i][j]);
}
}
//第二布:数据排序
for(i = 0;i < n;i++){
temp = arr[1][i];
k = i;
for(j = i;j < n;j++){
if(arr[1][j] < temp)
{
temp = arr[1][j];
k = j;
}
}
temp = arr[0][i];
arr[0][i] = arr[0][k];
arr[0][k] = temp;
temp = arr[1][i];
arr[1][i] = arr[1][k];
arr[1][k] = temp;
}
//第三布:遍历寻找
end = arr[1][0];
printf("第%d个活动被安排:%d开始,%d结束,\n",1,arr[0][1],arr[1][1]);
for(i = 1;i < n;i++){
if(arr[0][i] > end){
printf("第%d个活动被安排:%d开始,%d结束,\n",i+1,arr[0][i],arr[1][i]);
end = arr[1][i];
add++;
}
}
printf("总共%d个活动被安排",add);
}