4.6算法之贪心_702:Crossing River

题目

702:Crossing River
总时间限制: 1000ms 内存限制: 65536kB
描述
A group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shuttle arrangement must be arranged in order to row the boat back and forth so that all people may cross. Each person has a different rowing speed; the speed of a couple is determined by the speed of the slower one. Your job is to determine a strategy that minimizes the time for these people to get across.
输入
The first line of the input contains a single integer T (1 <= T <= 20), the number of test cases. Then T cases follow. The first line of each case contains N, and the second line contains N integers giving the time for each people to cross the river. There won’t be more than 1000 people and nobody takes more than 100 seconds to cross.
输出
For each test case, print a line containing the total number of seconds required for all the N people to cross the river.
样例输入
1
4
1 2 5 10
样例输出
17

翻译

一群N个人想要用一艘船渡过一条河,而这艘船最多只能载两个人。
因此,必须安排某种穿梭安排,以便来回划船,以便所有人都能过河。
每个人都有不同的划船速度;一对夫妇的速度是由较慢一方的速度决定的。
你的工作是确定一个策略,尽量减少这些人通过的时间。

输入的第一行包含单个整数T (1 <= T <= 20),测试用例的数量。
然后是T个案例。每种情况的第一行包含N,第二行包含N个整数,
表示每个人过河的时间。不会超过1000人,没有人花超过100秒的时间过马路。

对于每个测试用例,打印一行,其中包含所有N个人过河所需的总秒数。

理解

各人时间升序后是t[1],t[2],……,t[n-1]和t[n]
如果只有1个人,直接过t[1]。
如果只有2个人,直接过,只算慢的t[2]。
如果只有3个人,最优时间怎么算都是t[1]+t[2]+t[3]。3带1去,1回来,2带1去。或者1、2先去,1回来,1、3去。
在这里插入图片描述

如果4人以上,每次送走最后两个人。经过列数据掌握规律,最优时间是min(t[1]+2t[2]+t[n],2t[1]+t[n-1]+t[n]。
在这里插入图片描述
超过四个人,每次借助最快两人(要把船开回来)送走最慢两人。两种策略选择最优。

代码

#include <bits/stdc++.h>
using namespace std;
int m,n,t[1001];
int main(){
//freopen(“in.cpp”,“r”,stdin);
cin>>m;
while(m–){
memset(t,0,sizeof(t));
cin>>n;
for(int i=1;i<=n;i++)cin>>t[i];
sort(t+1,t+n+1);
int he=0;
for(;n>3;n-=2)he+=min(2t[1]+t[n-1]+t[n],t[1]+2t[2]+t[n]);
//送过去最慢的两个,也就是最后两个,也就是n和n-1
//一种,最快和最慢两个t[n]和t[n-1]的过去,最快的回来2*t[1]
//另一种,最快的两个过去t[2],最快的回来t[1],最慢的两个过去t[i],次快t[2]的回来
//4-2=2,5-2=3,6-2=4,所以循环后只会剩2和3
if(n%2)he+=t[1]+t[2]+t[3];
else he+=t[2];//1和2过去,只算2
cout<<he<<endl;
}
return 0;
}

贪心算法

动态规划可以画表格,明确初始值,逐阶段明确状态,找到因为阶段推进状态值的递推。还是有迹可循的。
贪心算法也需要罗列数据,找到规律。

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

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

相关文章

力扣223题详解:矩形面积的多种解法与模拟面试

在本篇文章中&#xff0c;我们将详细解读力扣第223题“矩形面积”。通过学习本篇文章&#xff0c;读者将掌握如何使用多种方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第223题“…

【C++】深入解析C/C++内存管理:new与delete的使用及原理

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类 本章将分享C为何放弃malloc/free系列&#xff0c;选择新系列new/delete去管理内存。深度探索new/delete的使用及其原理,m…

使用cbsd指令快速创建bhyve Ubuntu虚拟机实践

首先查看当前的模板 ls -la /usr/jails/etc/defaults/ 可以看到Ubuntu的20 22 23 24都有模板 ls /usr/jails/etc/defaults/vm-linux-ubuntuserver-amd64-2* /usr/jails/etc/defaults/vm-linux-ubuntuserver-amd64-20.conf /usr/jails/etc/defaults/vm-linux-ubuntuserver-a…

聚星文社——绘唐科技Ai推文软件

聚星文社——绘唐科技Ai推文软件 聚星文社--绘唐科技Ai推文软件https://iimenvrieak.feishu.cn/docx/ZhRNdEWT6oGdCwxdhOPcdds7nof AI推文软件是一种利用人工智能技术帮助用户自动生成推文内容的工具。 该软件会分析用户提供的相关信息和目标群体&#xff0c; 然后使用机器学习…

解决k8s分布式集群,子节点加入到主节点失败的问题

1.问题情况 Master主节点在 使用 kubeadm init 成功进行初始化后&#xff0c;如下所示 Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/k…

libevent之android与鸿蒙编译过程

背景 最近基于libevent开发了一个端侧的缓存代理库&#xff0c;先是基于macOS编译开发的&#xff0c;基本0问题&#xff0c;后来移植到鸿蒙与android时遇到一些编译链接问题。 libevent版本如下&#xff1a; 软件版本号libevent-2.1.8 android编译 编译环境 android studio…

信号和槽的第五个参数

在 Qt 中&#xff0c;connect 函数用于连接信号和槽。标准的 connect 函数有多个重载版本&#xff0c;其中一个版本包含五个参数。 第五个参数用于指定连接类型&#xff0c;即信号和槽的连接方式。以下是该函数的签名和参数说明&#xff1a; QMetaObject::Connection QObject…

【Python】FastAPI:快速上手

FastAPI 是一个现代的、快速的、高性能的 Python Web 框架&#xff0c;用于构建 API。它基于 Python 3.6 和标准的 ASGI&#xff08;Asynchronous Server Gateway Interface&#xff09;协议&#xff0c;主要用于创建高效且可维护的 API 服务。 FastAPI 简介 FastAPI 是一个用…

[数据集][目标检测]竹子甘蔗发芽缺陷检测数据集VOC+YOLO格式2953张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2953 标注数量(xml文件个数)&#xff1a;2953 标注数量(txt文件个数)&#xff1a;2953 标注…

tcp 和udp通信

一.recvfrom recvfrom函数是一个系统调用&#xff0c;用于从套接字接收数据。该函数通常与无连接的数据报服务&#xff08;如 UDP&#xff09;一起使用&#xff0c;但也可以与其他类型的套接字使用。与简单的 recv() 函数不同&#xff0c;recvfrom() 可以返回数据来源的地址信息…

秋招力扣Hot100刷题总结——回溯

回溯问题通常应用于解决排列组合等问题&#xff0c;需要注意的是回溯函数中的参数、结束条件、遍历开始顺序等。 回溯三部曲&#xff1a; &#xff08;1&#xff09;确定递归函数的参数。 &#xff08;2&#xff09;确定递归函数的终止条件。 &#xff08;3&#xff09;确定单层…

SQL进阶技巧:最近有效的缺失值填充问题【last_value实现版】

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 场景:现在有一张商品入库表,包括商品id、商品成本和入库日期3个字段,由于某些原因,导致部分商品的成本缺失(为0或者没有值都是缺失),这样不利于我们计算成本。所以现在要把缺失的商品进价补充完整,补充的…

Hive3:常用查询语句整理

一、数据准备 建库 CREATE DATABASE itheima; USE itheima;订单表元数据 1 1000000 100058 6 -1 509.52 0.00 28155.40 499.33 0 0 lisi shanghai 157 2019-06-22 17:28:15 2019-06-22 17:28:15 1 2 5000000 100061 72 -1 503.86 0.00 38548.00 503.86 1 0 zhangsan shangha…

如何让虚拟机识别到宿主机的USB设备

我的实验环境&#xff1a; Windows宿主机VirtualBox虚拟化软件一个Linux虚机一个8G的USB磁盘 首先要让虚拟机能看到宿主机的USB设备&#xff0c;这是在VirtualBox中设置的。 选中虚机&#xff0c;右键选择“设置”菜单&#xff0c;再单击“USB设备”&#xff1a; 选中“启用…

【分布式系统】关于主流的几款分布式链路追踪工具

Jaeger 标准化与兼容性&#xff1a; Jaeger 支持 OpenTracing 和 OpenTelemetry 标准&#xff0c;这意味着它可以与各种微服务架构和应用框架无缝集成&#xff0c;提供了广泛的兼容性和灵活性。 数据存储选项&#xff1a; Jaeger 支持多种数据存储后端&#xff0c;如 Cassandra…

白卡无法注册TDSCDMA问题分析

1、问题描述 MTK平台 实验室白卡测试TDSCDMA&#xff0c;默认无法注册。使用移动卡测试&#xff0c;无此问题。 2、问题分析 查看Radio log&#xff0c;Radio中反复下发EFUN去开关飞行模式。 39191: 08-14 22:45:57.159210 1469 1512 D RmcWp : [0] ECSRA info E…

UE4编安卓时Core模块为何只include Android文件夹?

Core模块 Core模块是整个引擎中最核心的模块。几乎UE4中的每个其他模块都导入Core。Engine\Source\Runtime\Core\Private下有很多文件夹&#xff0c;下面罗列一部分&#xff1a; G:\St\EngineSource\Engine\Source\Runtime\Core\Private 的目录 2024/07/18 12:02 <DIR…

在Linux中更换软件源

在Linux中更换软件源&#xff0c;通常是编辑 /etc/apt/sources.list 文件或者在 /etc/apt/sources.list.d/ 目录下的相关.list文件。以下是更换为阿里云源的例子&#xff1a; 1.备份原有的 sources.list 文件&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.li…

学习笔记七:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 安装Jenkins在kubernetes中部署jenkins创建名称空间创建pv,上传pv.yaml创建pvc创建一个sa账号通过deployment部署jenkins更新资源清单文件把jenkins前端加上service&#xff0c;提供外部网络访问 配置Jenkins获取…

数学建模学习(116):全面解析梯度下降算法及其在机器学习中的应用与优化

文章目录 1.梯度下降简介1.1 梯度下降的数学原理1.2 学习率的选择2 梯度下降变体3.梯度下降优化器3.1 动量法(Momentum)3.2 AdaGrad3.3 RMSprop3.4 Adam3.5 Python 使用不同优化器训练线性回归模型4.案例:使用梯度下降优化加利福尼亚房价预测模型4.1. 数据准备4.2. 模型训练…