信息学奥赛一本通/openjudge Crossing River

news2024/12/23 4:45:20

题目

一本通题目入口
openjudge题目入口
(注:由于一本通题面描述的可能有些欠缺,所以这里的题面采用openjudge英文翻译后的题面)
在这里插入图片描述

题目分析

首先我们来看样例,为什么样例的结果是17呢?首先观察,“5”和“10”较大,作为我们的首选要搞定的目标,那么我们怎样才能将“5”+“10”压小的点呢?我们可以以绝对贪心的角度去想。我若想让“5”+“10”的结果较小,肯定是要让其在一条船上,一起过河,此时我们就只用加“10”的时间了,那么这一下总得让船回来吧,难道要上“5”回来吗?不,肯定不能,所以我们得在河对岸安排一个数较小的人,让他将船再开回来,而送他过去自然又要一个数较小的,而最小的俩是“1”和“2”了,那么谁在对岸谁又送其过去呢?
假设“1”在对岸,则来回花费 m a x ( 1 , 2 ) + 1 + 2 max(1, 2)+1+2 max(1,2)+1+2
假设“2”在对岸,则来回花费 m a x ( 1 , 2 ) + 2 + 1 max(1,2)+2+1 max(1,2)+2+1
这俩结果一样,所以俩方案都行,那么由于搞定的最大的俩,剩下的俩可以一起过去,则这下时间为 m a x ( 1 , 2 ) + ( 1 + 2 ) 或 ( 2 + 1 ) + 10 + 2 = 17 max(1,2)+(1+2)或(2+1)+10+2=17 max(1,2)+1+2)(2+1)+10+2=17,刚好17。

经过上述的样例分析,我们得出一个比较省时间的方案(姑且先定为方案1):先让a和b(均为还没过河数中的较大值),一起过河,再通过媒介x(次小值或最小值),让船回来。
可是若次小的数c逼近于我选择的a和b(均为还没过河数中的较大值)时,会出现本来a和b一起乘船不大,但由于加入c这个逼近于a和b,而在算总时间时c要帮助最小值d(媒介x不是c自然是最小值d)过河,此时会算两次c(一次在max时,一次在返回时),在这种情况下总和自然会比其他方案要大的。
那么我若知道此时c会比较大,我肯定选择避开他,可比c还大的不能选,比c小的就一个最小值,故我们只能用最小值d使a和b过河,那么这种方案要最少时间,自然是贪心的让d一个一个的送a和b过河。
所以,为了应对a,b,c逼近m(m>=c 且 a,b>= m)的情况,我们设计如下方案(定为方案2):让最小值d送a和b过河。
最后由于方案1和方案2都是需要题面中n大于等于4的,所以对于n小于4的话可以直接特判断。
还有一个注意,最后未过河的数量可能不是0,所以需要和前面n小于4的情况一样的特判。

正解

此题使用贪心算法。
由于数据非有序,故要先排序,随后从高位进行枚举(未过河的数量小于4时终止),每次都需要比较此时用方案1还是方案2所需的时间小,并存在总时间变量sum里。最后特判n小于4或未过河的数量不是0的情况。
最后的代码:

#include<bits/stdc++.h>
using namespace std;

inline int read()
{
	int X=0; bool flag=1; char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
	while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
	if(flag) return X;
	return ~(X-1);
}
inline void write(int X)
{
	if(X<0) {X=~(X-1); putchar('-');}
	if(X>9) write(X/10);
	putchar(X%10+'0');
} 
const int N = 1050;
int n;
int a[N];
int main(){
	int T = read();
	while(T--)
	{
		n = read();
		for (int i = 1; i <= n; ++i) a[i] = read();
		int sum = 0;
		sort(a + 1, a + n + 1);
		for (; n >= 4; n -= 2)  //每次送过河两人故每次减2
		{
			//求方案1和方案2的最小值加入总答案
			sum = sum + min(2 * a[1] + a[n] + a[n - 1], a[2] * 2 + a[1] + a[n]);
		}  
		//特判
		if (n == 3) 
		{
			//任意俩先过去,这两种小的回来接另一个
			//比如说“1”和“3”先去,“1”回去接“2”,这样就是“1”+“2”+“3”
			sum = sum + a[1] + a[2] + a[3]; 
		}
		else if(n == 2)
		{
			sum = sum + a[2]; 
		}
		else if (n == 1) sum += a[1];
		write(sum);
		puts("");
	}
	return 0;
}

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

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

相关文章

node环境安装、vue-cli搭建过程、element-UI搭建使用过程

vue-cli 官方提供的一个脚手架&#xff0c;用于快速生成一个 vue 的项目模板&#xff1b;预先定义好的目录结构及基础代码&#xff0c;就好比咱们在创建 Maven 项目时可以选择创建一个骨架项目&#xff0c;这个骨架项目就是脚手架&#xff0c;我们的开发更加的快速 前端项目架…

Spark-Job启动、Stage划分

一、上下文 《Spark-driver和executor启动过程》详细分析了driver和executor的启动&#xff0c;此时资源已经给我们分配好了&#xff0c;且Application也已经注册完成。下面我们就来看看Spark是如何启动job并根据DAG来划分Stage的 二、Job启动 Spark RDD中的算子分为Transfo…

leetcode算法题之 K 个一组翻转链表

照我说这道题其实是披着困难皮的中等题目&#xff0c;问题如下&#xff1a; 题目地址 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍…

深入解析多商户商城系统源码:如何开发直播商城小程序?

本篇文章&#xff0c;小编将深入解析多商户商城系统源码的关键技术&#xff0c;并详细探讨如何基于这些源码开发一个功能完善的直播商城小程序。 一、多商户商城系统源码的核心构架 多商户商城系统源码的核心在于其能够支持多个商户独立运营&#xff0c;但同时又在一个统一的平…

(转载)内存分配器101——写一个简单的内存分配器

文章目录 前提正文Malloc()free()calloc()realloc() 前提 之前学习过手写一个简单的内存分配器&#xff0c;原文是英文的&#xff0c;当初学习的时候便将英文翻译为中文的&#xff0c;方便阅读&#xff0c;当然和原文相比少了点味道。今天整理资料的时候看到了自己的翻译&…

为什么越来越多的助贷中介公司做债务重组?

大家有没有注意到个现象&#xff1f;现在越来越多的助贷中介公司和专门做债务重组的公司一起“合作”了。有的是接了单转手给重组公司&#xff0c;有的则是亲自下场&#xff0c;用自有资金做起了重组的事情。为什么会这样呢&#xff1f;好端端的贷款中介不做&#xff0c;偏要蹚…

RabbitMQ练习(Remote procedure call (RPC))

1、RabbitMQ教程 《RabbitMQ Tutorials》https://www.rabbitmq.com/tutorials 2、环境准备 参考&#xff1a;《RabbitMQ练习&#xff08;Hello World&#xff09;》。 确保RabbitMQ、Sender、Receiver容器正常安装和启动。 rootk0test1:~# docker run -it --rm --name rab…

前端内存泄露案例与解决方案

什么是内存泄漏&#xff1f; 内存泄露&#xff08;Memory Leaks&#xff09;&#xff1a;是指应用程序已经不再需要的内存&#xff0c;由于某种原因未返回给操作系统或者空闲内存池&#xff08;Pool of Free Memory&#xff09;。 内存泄露可能带来的问题&#xff1a;变慢、卡…

SAP LE学习笔记07 - MM与WM跨模块收货到仓库的流程中 如何实现 先上架再入库

上一章讲了LE中收货的一些特殊情况&#xff1a; 1&#xff0c;MM模块收货时&#xff0c;特别移动指标来标识的物料直接产生TO 2&#xff0c;MM中直接收货到仓库的固定Storage Bin(棚番)上 SAP LE学习笔记06 - MM与WM跨模块收货到仓库的流程中 带特别移动指标的物料也可以直接…

spring security 会话管理

一、简介 当浏览器调用登录接口登录成功后&#xff0c;服务端会和浏览器之间建立一个会话(Session)浏览器在每次发送请求时都会携带一个 Sessionld&#xff0c;服务端则根据这个 Sessionld 来判断用户身份当浏览器关闭后&#xff0c;服务端的 Session 并不会自动销毁&#xff0…

结构型设计模式-适配器(adapter)模式-python实现

设计模式汇总&#xff1a;查看 通俗示例 想象一下&#xff0c;你刚从国外带回一台最新的笔记本电脑&#xff0c;但是你发现它的电源插头是德标插头&#xff0c;而家里的电源插座是中式插座&#xff0c;这时怎么办呢&#xff1f;你需要一个电源适配器来将德标插头转换成中式插座…

“萌宠经济”全球化浪潮:宠物品牌如何利用TikTok达人破局出海

在全球“萌宠经济”不断升温的背景下&#xff0c;宠物品牌出海成为了重要的战略。随着市场的增长和消费者对宠物产品的需求增加&#xff0c;品牌需要寻找有效的方式进入新的海外市场。在这种情况下&#xff0c;TikTok平台的崛起和宠物达人的影响力成为了宠物品牌破局出海的关键…

数据结构与算法(快速基础C++版)

数据结构与算法&#xff08;快速基础C版&#xff09; 1. 基本概念第1章 绪论1.1 数据结构的研究内容1.2 基本概念和术语1.2.1 数据、数据元素、数据项和数据对象1.2.2 数据结构1.2.3 数据类型和抽象数据类型1.2.4 概念小结 1.3 算法和算法分析1.4 总结 2. 基本的数据结构第2章 …

【PyTorch常用库函数】一文教你快速上手torch.abs()函数:获取张量的绝对值

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在深度学习领域&#xff0c;PyTorch是一个非常受欢迎的框架&#xff0c;它提供了丰富的库函数来支持各种复杂的计算任务。…

利用Leaflet.js创建交互式地图:多种形状单个区域绘制

引言 在地图应用开发中&#xff0c;用户经常需要对特定区域进行标识和规划。本文将深入探讨如何利用Vue.js的响应式特性与Leaflet.js的地图功能&#xff0c;打造一个支持多边形、矩形、圆形等多种形状绘制的交互式地图编辑器。 功能亮点 自由绘制多边形&#xff1a;用户可以自…

mysql基础语法——个人笔记

0 前言 以前学习且实践过mysql&#xff0c;但后来用得少&#xff0c;随着岁月更替&#xff0c;对其印象渐浅&#xff0c;所以每次需要用时&#xff0c;都会去再看一眼语法规范&#xff0c;然后才能放心动手操作 然而&#xff0c;在信息爆炸的时代&#xff0c;查语法规范时&am…

BUUCTF PWN wp--jarvisoj_level0

第一步 checksec &#xff0c;该题为64位。 分析一下二进制保护机制&#xff1a; Arch: amd64-64-little 这个字段表示二进制程序的架构是 64 位的小端序的 x86-64 架构。小端序意味着低位字节存储在内存中的低地址上&#xff0c;高位字节存储在高地址上。RELRO: No RELRO …

迁移学习之领域自适应(domain adaptation)

比如有一堆有标注的训练数据&#xff0c;这些数 据来自源领域&#xff0c;用这些数据训练出一个模型&#xff0c;这个模型可以用在不一样的领域。在训练的时 候&#xff0c;我们必须要对测试数据所在的目标领域有一些了解。 随着了解的程度不同&#xff0c;领域自适应的方法也不…

(C++ STL)vector类的简单模拟实现与源码展示

vector类的简单模拟实现 一、前言二、vector 的成员变量三、vector 部分函数实现size、capacityreserveresizeinsert 与注意事项erase构造、析构、赋值拷贝 四、vector 源代码 以下代码环境为 VS2022 C。 一、前言 vector类 本质上就是数据结构中的顺序表。(可参考&#xff1…

【最新华为OD机试E卷】boos的收入(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…