基本思路
将活动按结束时间降序排列,从第一个活动,按照第i个活动结束时间和第i+1个活动的开始时间是否兼容取0或1.
源码
/**
* 活动安排问题
* s[]开始时间 f[]结束时间 A[]取不取这个活动,1表示取,0表示不取
* index从1开始计算
* */
#include <stdio.h>
int A[20] = {0};
int s[20] = {0, 1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12};
int f[20] = {0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
void GreedySelector(int n)
{
A[1] = 1;
int j = 1;
for (int i = 2; i <= n; i++)
{
// 如果开始时间大于等于上一个活动的结束时间,就取1
if (s[i] >= f[j])
{
A[i] = 1;
j = i;
}
else
A[i] = 0;
}
}
int main(int argc, char const *argv[])
{
GreedySelector(11);
return 0;
}