/**
* @author gejing gjblmdlm@sina.com
* @version Creation Time:2014-6-24 下午9:14:57
* 活动安排问题,使用贪心算法
*/
public class Activities {
/**
* 贪心选择活动,进行标记,并返回确认安排的活动的个数
* @return 活动个数
*/
public static int greedSelect(int start[], int end[], boolean choose[]) {
int i = 0; // 表示当前考虑的活动
int j = 0; // 表示已经确认安排的活动的最大序号
choose[0] = true; // 表示活动0确认安排
int count = 1; // 表示确认安排的活动的个数(初始化为1,因为0号活动确认安排)
int num = start.length; // 表示所有活动的个数
// 遍历所有的活动,找到相容的活动(相容是指活动时间在数轴上的线段表示不相交)
for (i = 1; i < num; i++) {
if (start[i] >= end[j]) { // 判断当前活动是否与已经确认安排的活动相容
j = i;
count++;
choose[i] = true;
} else {
choose[i] = false;
}
}
return count;
}
public static void main(String[] args) {
int[] start = { 1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12 };
int[] end = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; // 按结束时间非递减排序
boolean choose[] = new boolean[11];
int count = greedSelect(start, end, choose);
System.out.println("最多可以安排" + count + "个活动\n");
for (int i = 0; i < 11; i++) {
if (choose[i]) {
System.out.println("活动" + i + "可以被安排 [" + start[i] + ","+ end[i] + "]");
}
}
}
}
活动安排问题(贪心版)
最新推荐文章于 2024-05-08 19:57:59 发布