计算机算法分析与设计(14)---贪心算法(会场安排问题和最优服务次序问题)

文章目录

  • 一、会场安排问题
    • 1.1 问题描述
    • 1.2 思路分析
    • 1.3 例题分析
    • 1.4 代码编写
  • 二、最优服务次序问题
    • 2.1 问题描述
    • 2.2 思路分析
    • 2.3 代码编写


一、会场安排问题

1.1 问题描述

 假设在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。

数据输入:
1 1 1 行中有一个整数 n n n,表示有 n n n 个待安排的活动。接下来的 n n n 行中,每行有 2 2 2 个正整数,分别表示 n n n 个待安排的活动的开始时间和结束时间。时间以 0 0 0 点开始的分钟计。
数据输出:
计算出的最少会场数并输出。

1.2 思路分析

 1. 贪心策略:采用结束时间最早的会场作为贪心选择。

 2. 用数组 s s s f f f 分别存储各活动的开始时间和结束时间。

  • 将数组 s s s 排序,该次序为各活动选择会场的次序。
  • 将数组 f f f 排序。由于会场的结束时间由活动的结束时间决定,排序后的数组也是会场的结束时间点。

 3. (1)先为最早开始的活动开辟一个会场,此时会场的最早结束时间为该活动的结束时间。(2)然后遍历剩下的活动。对于每个活动,判断当前最早结束的会场内是否仍有活动:如果有,开辟一个新会场;如果没有,说明当前最早结束的会场能容纳当前的活动,更新会场的结束时间点,保证最早结束的会场最先开始下一个活动。

1.3 例题分析

 设有 4 4 4 个活动,每个活动的开始和结束时间分别为 {1, 6},{4, 8},{9, 10},{7, 18}。
在这里插入图片描述

可能有同学有疑惑:每个活动的开始时间和结束时间怎么是分开排序的?那每个活动的开始时间和结束时间关联性不是打破了吗?有关联性的东西怎么能排序?
: 这道题不用关联,这个解法,只需要关心开始时间和结束时间,,只要集合里面的最大结束时间和当前的开始时间就可以。

1.4 代码编写

样例输入:
5
1 23
12 28
25 35
27 80
36 50
样例输出:
3

时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)

#include<bits/stdc++.h>
using namespace std;
int main(){int n;cout<<"请输入活动的个数:"<<endl;cin>>n;int s[n],f[n];cout<<"请输入每个活动的开始时间和结束时间:"<<endl;for(int i=0;i<n;i++){cin>>s[i]>>f[i];}sort(s,s+n);//理解一下为什么都要升序 sort(f,f+n);//会场的最短结束时间次序用j来表示,待分配的活动按i来遍历 int j=0,ans=0;for(int i=0;i<n;i++){if(s[i] < f[j]){ans++;}else{j++;}} cout<<"最小会场数是:"<<ans<<endl; return 0;
}

在这里插入图片描述

二、最优服务次序问题

2.1 问题描述

 设有 n n n 个顾客同时等待一项服务。顾客 i i i 需要的服务时间为 t i t_i ti 1 ≤ i ≤ n 1≤i≤n 1in。应如何安排 n n n 个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是 n n n 个顾客等待服务时间的总和除以 n n n。对于给定的 n n n 个顾客需要的服务时间,编程计算最优服务次序。

数据输入:
1 1 1 行是正整数 n n n,表示有 n n n 个顾客。接下来的 1 1 1 行中,有 n n n 个正整数,表示 n n n 个顾客需要的服务时间。
数据输出:
输出对应的最小平均等待时间,保留 2 2 2 位小数。

2.2 思路分析

 贪心策略:服务时间较短的顾客先完成他的业务,就会使总的等待时间达到最短。

2.3 代码编写

样例输入:
10
56 12 1 99 1000 234 33 55 99 812
样例输出:
532.00

#include<bits/stdc++.h>
using namespace std;
int main()
{int n;cout<<"请输入顾客的数目:"<<endl;cin>>n;int a[n];cout<<"请输入每位顾客需要服务的时间:"<<endl; for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);  //将每位顾客的等待时间按升序排序 int sum=0;int num=n;  //还剩下num个人在同时等当前这个在办理业务的人for(int i=0;i<n;i++){sum = sum+num*a[i]; //接受服务的那个人其实也在等待自己的服务结束 num--;}cout<<"平均等待时间是:"<<endl;double ans=sum/n;cout<<fixed<<setprecision(2)<<ans<<endl;return 0; 
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理

示例 -- 提醒: 本库输出的坐标,均为 WGS84 坐标系 -- 如需要在国内地图使用, 要转换成对应地图的坐标系, 例如 GCJ02 BD09 -- 相关链接: https://lbsyun.baidu.com/index.php?titlecoordinate -- 相关链接: https://www.openluat.com/GPS-Offset.html-- 方案1, 经lua层进行数…

十八、字符串(3)

本章概要 正则表达式 基础创建正则表达式量词CharSequencePattern 和 Matcherfinde()组&#xff08;Groups&#xff09;start() 和 end()Pattern 标记split()替换操作reset()正则表达式与 Java I/0 正则表达式 很久之前&#xff0c;_正则表达式_就已经整合到标准 Unix 工具…

python第三次作业

拿硬币 # 有一堆硬币&#xff0c;每次只能拿一个或者两个&#xff0c;求最少多少次可以拿完硬币 # [10, 8, 5, 3, 27, 99]# 定义如题的带有5个元素的列表&#xff0c;表示五堆硬币 list [10,8,5,3,27,99] # 定义一个变量用来记录拿的次数 get 0 # 将列表遍历,如果元素是双数…

芯片手册自用

UG585 ZYNQ BOOK&#xff1a;Zynq 7000 SoC 技术参考手册 Zynq 7000 SoC Technical Reference Manual • Zynq 7000 SoC Technical Reference Manual (UG585) • 阅读器 • AMD 自适应计算文档门户 (xilinx.com) UG586 MIG:Zynq-7000 SoC 和 7 系列器件内存接口解决方案 ug5…

python网络爬虫实例

目录 1、访问百度 2、输入单词百度翻译 3、豆瓣电影排行榜 4、豆瓣电影top250 5、下载美女壁纸 1、访问百度 from urllib.request import urlopen url"http://www.baidu.com" respurlopen(url)with open("mybaidu.html",mode"w") as f:f.wr…

ilr normalize isometric log-ratio transformation

visium_heart/st_snRNAseq/05_colocalization/create_niches_ct.R at 5b30c7e497e06688a8448afd8d069d2fa70ebcd2 saezlab/visium_heart (github.com) 更多内容&#xff0c;关注微信&#xff1a;生信小博士 The ILR (Isometric Log-Ratio) transformation is used in the anal…

python 动态加载C# 动态库的一些问题

python导入C#动态库问题 背景介绍 我使用的python是3.7&#xff0c;需要调用之前已经用于其他项目的C#编写的动态库(xx.dll).由于调用方法很简单&#xff0c;可以参考下这个调用动态库,这里主要说一下我遇到的问题。 试图加载格式不正确的程序 这个问题实际是由于目标程序和…

Maven 生命周期clean default size含义

clean 负责清理工作&#xff0c;清理上一次项目构建产生的一些文件&#xff0c;如编译后的字节码文件&#xff0c;打包后的jar包文件 default 整一个项目构建的核心工作&#xff0c;如编译&#xff0c;测试&#xff0c;打包&#xff0c;安装&#xff0c;部署等等 size 生成报告…

CLion使用SSH远程连接Linux服务器

最近要一直用实验室的服务器写Linux下的C代码, 本来一直用VScode(SSH)连接服务器, 但是我以前还是用JetBrains的IDE用的多, 毕竟他家的IDE代码提示和功能在某些细节上更加丰富。所以这次我使用了Clion里的远程连接(同样也是SSH工具)连接上了我的服务器, 实现了和VScode上同样的…

Netty基础入门和基本使用

文章目录 一、Netty的异步回调模式1、GenericFutureListener接口2、Future接口3、ChannelFuture的使用 二、Netty中的Reactor反应器模式1、Channel通道组件2、Reactor反应器3、Handler处理器4、Netty的流水线&#xff08;Pipeline&#xff09; 三、Bootstrap启动器类1、父子通道…

【FPGA零基础学习之旅#17】搭建串口收发与储存双口RAM系统

&#x1f389;欢迎来到FPGA专栏~搭建串口收发与储存双口RAM系统 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0…

初始化固定长度的数组

完全解析Array.apply(null,「length: 1000」) 创建固定长度数组&#xff0c;并且初始化值。直接可以使用map、forEach、reduce等有遍历性质的方法。 如果直接使用Array(81)&#xff0c;map里面的循环不会执行。 //方法一 Array.apply(null, { length: 20 })//方法二 Array(81)…

Linux 开机启动一条PHP命令

当你开机的时候要自动的启动一条PHP命令场景&#xff1a;比如webman 你需要手动启动项目进程 你可以这样操作 流程&#xff1a; 1、准备好你要执行的命令 2、将命令写入一个服务文件 3、开机自启这个服务 实例&#xff1a; 1、比如这个命令 /usr/local/php/bin/php /ho…

Docker:创建主从复制的Redis集群

一、Redis集群 在实际项目里&#xff0c;一般不会简单地只在一台服务器上部署Redis服务器&#xff0c;因为单台Redis服务器不能满足高并发的压力&#xff0c;另外如果该服务器或Redis服务器失效&#xff0c;整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能&#x…

启动类的注解

SpringBootApplication 是 SpringBoot 将自动扫描应用程序中的组件并配置应用程序 入口点标记&#xff1a;标记应用程序的主类&#xff0c;SpringBoot 应用程序的入口点 自动配置&#xff1a;自动配置应用程序所需的各种设置&#xff0c;包括数据库连接、Web服务器、日志、安…

EasyExcel使用方式(包含导出图片)

1、导EasyExcel依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version> </dependency> 2、创建导出excel的实体类 Getter Setter EqualsAndHashCode HeadStyle(fillF…

CouchDB简单入门

CouchDB 1.curl命令 RESTful 新增&#xff1a;POST请求修改&#xff1a;PUT请求删除&#xff1a;DELETE请求查找&#xff1a;GET请求 查看数据库有哪些 curl -X GET http://admin:123456localhost:5984/_all_dbsadmin: 用户名 123456:改成自己密码 创建数据库 curl -X PU…

Java面试题-Java核心基础-第十三天(序列化)

目录 一、Java序列化与反序列化是什么&#xff1f; 二、为什么需要序列化与反序列化&#xff1f; 三、序列化的实现方式有哪些&#xff1f; 四、什么是serialVersionUID? 五、为什么还要显示指定serialVersionUID 六、serialVersionUID什么时候修改&#xff1f; 七、Jav…

PostgreSQL将文本转换成固定的长整型

背景&#xff1a;某个表没有主键&#xff0c;但是有个字段名称&#xff08;varchar类型&#xff09;是唯一的&#xff0c;而一般习惯用BIGINT作为主键&#xff0c;于是想到将名称转成BIGINT主键。 考虑到&#xff1a;数字转文本我们常用md5算法&#xff0c;那么是否能用类似的…

c++ vscode cmake debug for mac

1. 下载vscode 2. 安装c插件 参考&#xff1a;C programming with Visual Studio Code 3. 安装llvm&#xff0c;可以使用brew安装 4. 配置llvm到系统环境变量中 5. 编写c代码 6. 编写CMakeLists.txt文件&#xff08;前提安装cmake&#xff09; cmake_minimum_required(V…