C++小练习—会场安排
来源:互联网 发布:英国大学申请 知乎 编辑:程序博客网 时间:2024/06/08 09:50
1、问题描述
™设有n个会议,需要使用同一个资源(如会议室),同一时间内该会议室只能被一个会议占用。每个会议i都有要求使用该资源的起始时间s和结束时间e,且s<e。如果选择了会议i使用会议室,则它在半开区间[si,ei)内占用该资源。如果[si,ei)与[sj , ej)不相交,则称会议i与会议j是相容的。会场安排问题要求在所给的会议集合中选出最大的相容活动子集,也就是可以尽可能多的选择会议来使用会议室。
2、算法设计
1)贪心算法的解题步骤
a、分解:将原问题分解为若干个相互独立的阶段。
b、解决:对于每个阶段依据贪心策略进行贪心选择,求出局部的最优解。
c、合并:将各个阶段的解合并为原问题的一个可行解。影响时间复杂性的因素
2)针对该问题的贪心策略
a、选择最早开始时间且不与已安排会议重叠的会议
b、选择使用时间最短且不与已安排会议重叠的会议
c、选择具有最早结束时间且不与已安排会议重叠的会议
但是由推倒可知,只有按最早结束时间才能获得我们想要的结果。
3)算法设计步骤
步骤1:初始化。定义结构体用来存储会议的起始时间s和结束时间e。采用容器来存储该结构体节点,并用sort函数对其按照结束时间的非减序排序;
步骤2:根据贪心策略,进行判断;
3、代码2、算法设计
1)贪心算法的解题步骤
a、分解:将原问题分解为若干个相互独立的阶段。
b、解决:对于每个阶段依据贪心策略进行贪心选择,求出局部的最优解。
c、合并:将各个阶段的解合并为原问题的一个可行解。影响时间复杂性的因素
2)针对该问题的贪心策略
a、选择最早开始时间且不与已安排会议重叠的会议
b、选择使用时间最短且不与已安排会议重叠的会议
c、选择具有最早结束时间且不与已安排会议重叠的会议
但是由推倒可知,只有按最早结束时间才能获得我们想要的结果。
3)算法设计步骤
步骤1:初始化。定义结构体用来存储会议的起始时间s和结束时间e。采用容器来存储该结构体节点,并用sort函数对其按照结束时间的非减序排序;
步骤2:根据贪心策略,进行判断;
步骤3:依次扫描每一个会议,如果会议i的开始时间不小于最后一个选入A中的会议的结束时间,则打印会议i的编号;否则,放弃,继续检查下一个会议与A中会议的相容性。
#include<iostream>#include<algorithm>#include<vector>using namespace std;typedef struct node{ int s; int e; int number;}Node;//采用结构体来存储会议信息vector<Node> v;bool compare(Node a,Node b){return a.e<b.e;}void MeetArra(){int CurrTime=0;sort(v.begin(),v.end(),compare);//按照结束时间进行排序for(auto it=v.begin();it!=v.end();++it){if(it->s>=CurrTime){cout<<it->number<<" ";CurrTime=it->e;}}}int main(){int i,n,k=1;cout<<"请输入总会议数:";cin>>n;Node t;for(i=1;i<=n;++i){t.number=k;//用于给会议编号,方便输出k++;cout<<"输入起始时间:";cin>>t.s;cout<<"输入结束时间:";cin>>t.e;v.push_back(t);}MeetArra();system("pause");return 1;}
0 0
- C++小练习—会场安排
- 【C语言】 会场安排问题
- 会场安排——贪心
- 会场安排问题—NYOJ14
- 会场安排
- 会场安排
- 会场安排
- 会场安排
- c语言-算法课程设计-会场安排
- 贪心算法——会场安排问题
- 贪心算法——会场安排问题
- C语言 南阳理工ACM 14 会场安排问题
- 会场安排问题
- 会场安排问题
- 会场安排问题
- 贪心--会场安排问题
- 会场安排问题
- 会场安排问题
- unble to connect to the virtual device
- iOS应用崩溃日志
- cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用
- C++primer(第五版)第九章 顺序容器(容器的运用及其部分习题解答,C++11特性总结,重点章节内容较多)
- Apache shiro(3)—cas + shiro配置说明
- C++小练习—会场安排
- js 一个等号"=" 二个等号"==" 三个等号"===" 的区别
- AudioRecord实现"助听器"
- Unity Coroutine协同程序
- debian下搭建NFS服务器
- 【c++笔记一】"名字空间"(namespace)
- day02(进制转换+算术、赋值、比较、逻辑运算符)
- 1017. A除以B
- TortoiseSVN 的使用