做网站三河asp与sql做网站
做网站三河,asp与sql做网站,网站建设中静态页面模板,宁德做网站的公司问题背景#xff1a;
所谓“钟点秘书”#xff0c;是指年轻白领女性利用工余时间为客户提供秘书服务#xff0c;并按钟点收取酬金。“钟点秘书”为客户提供有偿服务的方式一般是#xff1a;采用电话、电传、上网等“遥控”式 服务#xff0c;或亲自到客户公司处理部分业务…问题背景
所谓“钟点秘书”是指年轻白领女性利用工余时间为客户提供秘书服务并按钟点收取酬金。“钟点秘书”为客户提供有偿服务的方式一般是采用电话、电传、上网等“遥控”式 服务或亲自到客户公司处理部分业务。其服务对象主要有三类一是外地前来考察商务经营、项目投资的商人或政要人员他们由于初来乍到急需有经验和熟悉本地情况的秘书帮忙二是前来开展短暂商务活动或召开小型资讯发布会的国外客商三是本地一些请不起长期秘书的企、事业单位。这些客户普遍认为请“钟点秘书”一则可免去专门租楼请人的大笔开销二则可根据开展的商务活动请有某方面专长的可用人才三则由于对方是临时雇用关系工作效率往往比固定的秘书更高。据调查在上海“钟点秘书”的行情日趋看好。对此业内人士认为为了便于管理各大城市有必要组建若干家“钟点秘书服务公司”通过会员制的形式为众多客户提供规范、优良、全面的服务这也是建设国际化大都市所必需的。某跨国公司总裁正分身无术为一大堆会议时间表焦头烂额希望高级钟点秘书能做出合理的安排能在有限的时间内召开更多的会议。
问题分析
这是一个典型的会议安排问题会议安排的目的是能在有限的时间内召开更多的会议 任何两个会议不能同时进行。在会议安排中每个会议 i 都有起始时间 bi 和结束时间 ei且 biei即一个会议进行的时间为半开区间[biei。如果[biei与[bjej均在“有限的时间内”且不相交则称会议 i 与会议 j 相容的。也就是说当 bi≥ej 或 bj≥ei 时会议 i与会议 j 相容。会议安排问题要求在所给的会议集合中选出最大的相容活动子集即尽可能在有限的时间内召开更多的会议。在这个问题中“有限的时间内这段时间应该是连续的”是其中的一个限制条件也应该是有一个起始时间和一个结束时间简单化起始时间可以是会议最早开始的时间结束时间可以是会议最晚结束的时间任务就是实现召开更多的满足在这个“有限的时间内”等待安排的会议。
算法设计
1初始化将 n 个会议的开始时间、结束时间存放在结构体数组中想一想为什么 不用两个一维数组分别存储如果需要知道选中了哪些会议还需要在结构体中增加会议编号然后按结束时间从小到大排序非递减结束时间相等时按开始时间从大到小排序非递增 2根据贪心策略就是选择第一个具有最早结束时间的会议用 last 记录刚选中会议的 结束时间 3选择第一个会议之后依次从剩下未安排的会议中选择如果会议 i 开始时间大于 等于最后一个选中的会议的结束时间 last那么会议 i 与已选中的会议相容可以安排更新 last 为刚选中会议的结束时间否则舍弃会议 i检查下一个会议是否可以安排。
通俗讲先将数据存到结构体中用结束时间从小到大排序若结束时间相同以开始时间由大到小排序之后再次基础上再判断开始时间在会议按结束时间非递减排序的基础上首先选中第一个会议用 last 变量记录刚刚被选中会议的结束时间。下一个会议的开始时间与 last 比较如果大于等于 last则选中。每次选中一个会议更新 last 为最后一个被选中会议的结束时间被选中的会议数counter加 1如果会议的开始时间不大于等于 last继续考查下一个会议直到所有会议考查完毕。最后返回counter即可
样例输入
10//10个会议 3 6 //开始时间 结束时间 1 4 5 7 2 5 5 9 3 8 8 11 6 10 8 12 12 14
样例输出
4
代码如下
#include iostream
#includestdio.h
#includealgorithm
using namespace std;struct meet{//用结构体存储会议int begin1;//会议开始时间int end1;//辉夜结束时间int number;//会议编号
}a[1014];bool beyond(meet a,meet b){//按结束时间由早到晚排序if(a.end1 b.end1) return a.begin1b.begin1;//若结束时间相同会议开始时间由晚到早排序return a.end1b.end1;
}int main()
{int all;//总会议数int last;int counter1;scanf(%d,all);for(int i0;iall;i){scanf(%d,a[i].begin1);scanf(%d,a[i].end1);a[i].number i1;//会议编号}sort(a,aall,beyond);//会议结束时间由早到晚排序last a[0].end1;//这里的last为结束最早的会议结束时间for(int j1;jall;j){if(a[j].begin1 last){//然后找另一个比这个会议结束时间大的开始时间的会议counter ;last a[j].end1;}}printf(%d,counter);return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90478.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!