贪心-活动安排问题
2016-04-20 22:05
288 查看
贪心算法得到的并不一定是问题的整体最优解。但在这个问题中,贪心算法最终确定的相容活动集合A的规模最大。
描述:11件活动,各自有不同的开始和结束时间。求在所给活动的集合众选出最大的相容活动子集合。
描述:11件活动,各自有不同的开始和结束时间。求在所给活动的集合众选出最大的相容活动子集合。
#include <iostream> using namespace std; bool A[11]; int s[11] = {1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12}; int f[11] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; //s[i]和f[i]代表每个活动开始和结束时间 template <class Type> void GreedySelector(int n, Type s[], Type f[], bool A[]){ //A[i]表示活动是否被选择 A[0] = true; int j = 1; for(int i = 1; i <= n; i++){ if(s[i] >= f[j]){ //当活动i的起始时间大于j的结束时间时 A[i] = true; //将活动i选择 j = i; //以活动i作为结束时间的判断 } else{ //当活动i的起始时间小于j的结束时间时 A[i] = false; //活动i不被选择 } } } int main(){ GreedySelector(11, s, f, A); cout << "此问题的一种安排方式为选择活动编号分别为:" << endl; for(int i = 0; i < 11; i++){ if(A[i]) cout << i <<" "; } cout << endl; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析