求解活动安排问题
假设有一个需要使用某一资源的由n个活动组成的集合S,S=(1,2,…,n),该资源在任何时刻只能被一个活动所占用,活动i有一个开始时间bi和结束时间ei(bi<ei),执行时间为ei-bi,假设最早活动执行时间为0.一旦某个活动开始执行,就不能被打断,直到执行完毕。若活动i和活动j有bi>=ej或bi>=ei,则称这两个活动兼容。设计算法求一种最优活动安排方案,使得所有安排的活动个数最多。
#include <stdio.h>
#include <string.h>
#define MAX 51
//问题表示
struct Action
{
int b; //活动起始时间
int e; //活动结束时间
};
int n = 4;
Action A[] = {
{
0,0},{
1,3},{
2,5},{
4,8},{
6,10} }; //下标0不用
//求解结果表示
int x[MAX]; //解向量
int bestx[MAX]; //最优解向量
int laste = 0; //一个方案中最后兼容活动的结束时间
int sum = 0; //一个方案中所有兼容活动个数
int maxsum = 0; //最优方案中所有兼容活动个数
void swap(int& x,