4.6算法之贪心_702:Crossing River

news2025/1/12 23:37:36

题目

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.coloradmin.cn/o/2064606.html

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

相关文章

【TB作品】普中V2,数字时钟万年历显示,音乐闹钟,流水灯,Proteus仿真

文章目录 功能硬件原理图LCD1602独立按键LED灯ds1302蜂鸣器 引脚汇总按键功能code 功能 带闹钟和花样流水灯的LCD数显实时时钟设计&#xff08;运用DS1302时钟模块&#xff0c;LCD显示&#xff0c;带万年历&#xff0c;时间到响音乐显示花样流水灯&#xff09; 万年历显示 按…

禹神:三小时快速上手TypeScript,TS速通教程(上篇、中篇、下篇,3合1笔记),根据视频整理

TypeScript快速上手 &#x1f4da;一、TypeScript简介 1.TypeScript由微软开发&#xff0c;是其于JavaScript的一个扩展语言. 2.TypeScript包含了JavaScript的所有内容&#xff0c;即&#xff1a;TypeScript是JavaScript的超集 3.TypeScript增加了&#xff1a;静态奖型检查、接…

Win10安装ChatTTS-2024-cuda10.1

0x00 前言 ChatTTS是专门为对话场景设计的文本转语音模型&#xff0c;例如大语言助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。目前在huggingface中的开源版本为4万小时训练且未SFT的版本。 0x01 准备环境 版本操作系统Win1…

大模型参数高效微调技术总结

基础知识 最近&#xff0c;OpenAI推出的ChatGPT展现出了卓越的性能&#xff0c;引发了大规模语言模型(Large Language Model, LLM)的研究热潮。大规模语言模型的“大”体现在两个方面&#xff1a;模型参数规模大&#xff0c;训练数据规模大。以GPT3为例&#xff0c;GPT3的参数…

springboot集成redis之接口缓存

什么是redis的接口缓存&#xff1f; Redis的接口缓存是一种利用Redis这种内存数据库来存储接口&#xff08;API&#xff09;响应数据的技术&#xff0c;以提高应用程序的响应速度和性能。具体来说&#xff0c;当用户请求一个接口时&#xff0c;系统会首先检查Redis缓存中是否已…

windows vs2022 MFC使用webview2嵌入网页

Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎&#xff0c;以在本机应用中显示 web 内容。 一、通过菜单“项目”-“管理NuGet程序包”&#xff0c;下载相关包 二、安装 Microsof…

windows ssh launch Jenkins

一、 windows server2012 ssh launch jenkins 经过一系列测试验证发现&#xff0c;windows server2012始终无法launch到jenkins master。配置ssh之后 [08/21/24 10:08:03] [SSH] Opening SSH connection to 172.xx.xx.xx:18822. [08/21/24 10:08:03] [SSH] WARNING: SSH Host …

DBeaver连接GBase 8s数据库的步骤

最近在学习国产数据库GBase 8s。酷酷一顿操作后&#xff0c;发现自带的 dbaccess 不好用&#xff0c;然后尝试用DBeaver这种图形界面来尝试使用。 本次使用工具&#xff1a; 1、dbeaver-ce-24.1.4 2、GBase 8s Server 8.8 一、搭建环境&#xff0c;官方建议使用的是CentOS 7.3&…

vue 实现批量引入组件

批量引入组件 1.目录示例2.被引入组件示例3.全局注册方法3.1.require.context() 是什么3.2.require.context() 用法 4.使用全局注册方法5.使用 1.目录示例 2.被引入组件示例 注意&#xff1a;必须要有name <template><div>Hkmxdy</div> </template> &l…

【学习笔记】Day 21

一、进度概述 1、机器学习常识19-22&#xff0c;以及相关代码复现 二、详情 19、矩阵分解 矩阵分解是一个纯数学问题&#xff0c;但当给矩阵赋予现实意义后&#xff0c;矩阵分解就成为了使用数学应对机器学习问题的一类典型而巧妙的方法。 在线性回归分析中&#xff…

PaddleNLP 3.0 支持大语言模型开发

huggingface不支持模型并行。张量并行&#xff0c;不满足大规模预训练的需求。 1、组网部分 2、数据流 3、训练器 4、异步高效的模型存储

CV每日论文--2024.7.25

1、Diffusion Models for Monocular Depth Estimation: Overcoming Challenging Conditions 中文标题&#xff1a;单目深度估计的扩散模型&#xff1a;克服具有挑战性的条件 简介&#xff1a;本文提出了一种新颖的方法,旨在解决单张图像深度估计任务中具有挑战性的、超出分布范…

java设计模式--结构型模式

结构性模式&#xff1a;适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09; 充当两个不兼容接口之间的桥梁&#xff0c;属于结构型设计模式。目的是将一个类的接口转换为另一个接口&am…

Numba加速计算(CPU + GPU + prange)

文章目录 加速方法&#xff1a;Numba、CuPy、PyTorch、PyCUDA、Dask、Rapids一、Numba简介二、Numba类型&#xff1a;CPU GPU三、项目实战 —— 数组的每个元素加23.1、使用 python - range 循环计算 —— &#xff08;时耗&#xff1a;137.37 秒&#xff09;3.2、使用 python…

天空卫士五载出海路:让国际数据安全舞台,有我们的身影

在全球化和“一带一路”倡议的推动下&#xff0c;中国企业正加速出海&#xff0c;探索新的增长机会。中国联通联合天空卫士等合作伙伴&#xff0c;推出“安全产业链联合出海计划”&#xff0c;旨在汇聚资源&#xff0c;打造国家级网络安全产业平台&#xff0c;推动出海业务的发…

C# 必备技能—项目打包

目录 前言 准备工作 第一步 第二步 第三步 扩展 总结 最后 前言 在C#开发中&#xff0c;项目打包是一个重要的环节&#xff0c;将你的应用程序及其依赖项组织成一个或多个可以在目标系统上安装和运行的包。 这对于发布应用程序至关重要&#xff0c;因为它确保了最终用…

快9月才开强化❓张宇36讲+1000题速刷指南

很多同学问&#xff0c;基础跟的是张宇老师&#xff0c;但是感觉25版张宇36讲太厚&#xff0c;可不可以不看&#xff0c;换其他老师 当然可以&#xff0c;但是如果你基础跟的是张宇老师&#xff0c;那强化阶段换成其他老师&#xff0c;可能会重复听一些内容&#xff0c;造成时…

手机APP应用移动端身份证识别技术,实现扫描录入身份信息

随着移动互联网的的发展&#xff0c;越来越多的公司都推出了自己的手机APP&#xff0c;这些APP多数都涉及到个人身份证信息的输入认证&#xff08;即实名认证&#xff09;&#xff0c;如果手动去输入身份证号码和姓名&#xff0c;速度非常慢&#xff0c;且用户体验非常差。为了…

Godot《躲避小兵》实战之游戏开始界面制作

我们的游戏还需要用户可操作的界面&#xff0c;比如开始游戏&#xff0c;退出以及显示分数等UI界面。 创建新场景&#xff0c;点击“其他节点”按钮&#xff0c;然后添加一个 CanvasLayer 节点并命名为 HUD。“HUD”是“heads-up display”&#xff08;游戏信息显示&#xff0…

2055. 欧拉路

代码 #include<bits/stdc.h> using namespace std; int n,e,a[35][35],d[35],r[55],k0; void dfs(int x) {for(int i1;i<n;i){if(a[x][i]1){a[x][i]0;a[i][x]0;dfs(i);}}k;r[k]x; } int main() {int x,y,i,s1;cin>>n>>e;for(i1;i<e;i){cin>>x&g…