问题描述:

有n个活动的活动集合E ,其中每一个活动都要求使用同一个资源,而在同一个时刻内资源只能被一个活动使用,每一个活动都有开始是时间和结束时间,要求从活动集合E中选出m个活动,使着m个活动都能顺利进行,即也就是每个活动的活动时间都互相不交叉,求m的最大值和 被选中的活动序号。

例如输入:

活动编号   活动开始时间    活动结束时间

1                1                       4

2                3                       5

3                0                       6

4                5                       7

5                3                       8

6                5                       9

7                6                       10

8                8                       11

9                8                       12

10              2                       13

11              12                     14

本程序利用贪心算法解决,输出的答案是:

应该选择的活动编号为:

1      4        8        11(即最大可以安排这4个活动)

#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;/*
*活动安排问题(贪心算法)
*/struct Act
{
int beg;//活动的开始时间
int end;//活动的结束时间
int index;//活动的编号
friend ostream & operator<<(ostream &o,const Act &A);
friend istream & operator>>(istream &o, Act &A);
};
ostream & operator<<(ostream &o,const Act &A)
{
o<<A.beg<<"---"<<A.end<<" ";
return o;
}istream & operator>>(istream &o, Act &A)
{
o>>A.index>>A.beg>>A.end;
return o;
}bool cmp(Act & act1,Act & act2)
{
if(act1.end<act2.end)
{return true;
}else
{
return false;
}
}vector<int> GreedySelector(vector<Act> & acts)
{
//首先把活动按照活动的结束时间进行排序
sort(acts.begin(),acts.end(),cmp);
//在排序后的活动集合中选择可行的活动
vector<int> res;
res.push_back(acts[0].index);//首先选中第一个活动
int now = 0;//当前选中的活动下标
for (int i = 1; i < acts.size(); i++)
{
if(acts[i].beg>=acts[now].end)
{
now = i;
res.push_back(acts[i].index);
}
}
return res;
}int main()
{
vector<Act> acts;//可选活动集
copy(istream_iterator<Act>(cin),istream_iterator<Act>(),back_inserter(acts));
cout<<endl;
vector<int> res_act;//得出的方案中的活动编号集
res_act = GreedySelector(acts);
//输出结果
copy(res_act.begin(),res_act.end(),ostream_iterator<int>(cout,"  "));
cout<<endl;
}

活动安排问题(贪心算法)相关推荐

  1. 活动安排问题--贪心算法

    活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子.该问题要求高效地安排一系列争用某一公共资源的活动.贪心算法提供了一个简单.漂亮的方法使得尽可能多的活动 ...

  2. 活动安排问题(贪心)

    活动安排问题(贪心) 有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? Input 第一行一个正整数n (n <= ...

  3. java活动安排_贪心法求解活动安排(java实现)

    贪心法描述: 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优 ...

  4. C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...

    贪心算法解决会场安排问题多处最优服务次序问题(含源代码) 西 安年月日-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源 ...

  5. 活动安排问题-计算机算法

    贪心算法 基本思想 在对问题求解时,总是遵循某种规则做出在当前看来是最好的选择,期待通过所做的局部最优选择来产生一个全局最优解. 缺点 贪心算法不是对所有问题都能得到整体最优解. 例子 从前有一只鹅, ...

  6. 会场安排问题贪心算法

    问题描述: 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.设计一个有效的贪心算法进行安排(这个问题实际上是著名的图着色问题.若将每一个活动作为图的一个顶点,不相容活动间用边相连.使相邻 ...

  7. NYOJ 14 会场安排问题 贪心算法 之 选择不相交区间

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...

  8. 活动选择的贪心算法与动态规划

    问题: 有一个需要使用每个资源的n个活动组成的集合S= {a1,a2,···,an },资源每次只能由一个活动使用.每个活动a都有一个开始时间和结束时间,且 0<= s < f .一旦被选 ...

  9. 解题报告 『活动安排(贪心)』

    原题地址 第一次提交WA了两个点,因此特地写一篇博客. 错误见代码: #include <bits/stdc++.h> using namespace std; #define rep(i ...

最新文章

  1. jsp 插入mysql乱码_JSP MySQL插入数据时出现中文乱码问题的解决方法
  2. 青龙羊毛——东方头条(搬砖,非原创)
  3. 推荐算法中用户画像构建
  4. mysql左键关联_MySQL的:左键删除重复列加入,3个表
  5. php中什么是函数函数的意义是什么,php中arsort函数的功能起什么作用呢?
  6. Python学习十大良好习惯
  7. PRML-系列一之1.2.2~1.2.3
  8. php算法结构,PHP数据结构与算法:顺序表
  9. 矩阵乘法c语言蓝桥杯,[蓝桥杯][基础练习VIP]矩阵乘法 (C语言代码)
  10. 按钮打开Activity
  11. iOS10获得系统权限
  12. Golang多线程文件传输
  13. summernote 添加emoji表情包
  14. 180422 3步法Windows10引导Ubuntu开机启动
  15. 云时代,网络攻击已经“鸟枪换炮”,你的企业安全还在按兵不动?
  16. 关于-32768的补码!
  17. URLDecoder.decode与URLEncoder.encode
  18. 什么是雅可比矩阵?利用雅可比矩阵分析动力学
  19. jQuery动画事件
  20. 【行为管理篇】03. 网桥模式连接 ❀ 深信服上网行为管理

热门文章

  1. Hadoop2.6.0学习笔记(九)SPOF解决方案Quorum机制
  2. HarmonyOS app 开发应用框架的架构和组成(Java)
  3. 为了让手表更好用,苹果找人先“戴”了7年半
  4. 【大数据之Hadoop3.x】
  5. 计算机网络知识点总结——第六章应用层
  6. 中南大学计算机夏令营经验,一位保送至中南大学学长的保研经验分享!
  7. vmware虚拟机挂载ISO镜像并创建本地yum源
  8. Abaqus常用命令
  9. 使用IDEA打包项目(jar包和war包)
  10. 给 Linux 系统“减肥”,系统垃圾清理