1141. 【贪心算法】排队打水

算法基础——排队打水(贪心算法) 利用前缀和思路解题,如下图所示,图中已经默认1,2,3,4,5…不难看出,某个人的等待接水的时间之和就是他前一个的前缀和数组(即4号的排队的等待时间就是s[3],5号的排队时间就是s[4]),因此,总的所有人的等待时间之和就是s[0]+s[1]+s[2]+s[3]+s[4]。典型的贪心问题,根据我们的直觉判断就是,让装满水时间越短的人排在越靠前面的位置,那么所有人等待的时间之和就会最短!(因为越排前面打水的人,后面等待的人数就越多,即有更多的人需要等待【排前面打水人所用的时间t】,导致等待时间之和增加)。 阅读详情

题目描述

有n(n<=1000)个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

输入

输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。

输出

输出文件有两行,第一行为一种排队顺序,即1到n的一种排列(如果有多种方案,请输出字典序最小的方案);第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

样例输入

10 
56 12 1 99 1000 234 33 55 99 812

样例输出

3 2 7 8 1 4 9 6 10 5
532.00

先排序,将每人的等待时间相加,输出时求平均值

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

int n, a[100005][3];
float ans, s;

main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		{
			scanf("%d", &a[i][1]);
			a[i][2] = i;
		}
	for (int i = 1; i <= n - 1; i++)
		{
			for (int j = i + 1; j <= n; j++)
				{
					if (a[j][1] < a[i][1])
						{
							swap(a[i][1], a[j][1]);
							swap(a[i][2], a[j][2]);
						}
				}
		}
	for (int i = 1; i <= n; i++)
		{
			s += a[i][1];
			ans += s;
		}
	for (int i = 1; i <= n; i++)
		printf("%d ", a[i][2]);
	printf("\n");
	printf("%.2f", ans / n);
}

贪心算法动态规划-排队打水、导弹问题、活动选择 排水打水问题 有n个人排队到r个水龙头去打水,他们装满水桶的时间t1,t2,…,tn为整数且各不相等,应如何安排他们的打水顺序才能使他们花费的总时间最少? 每个人打水的时间 = 排队的时间 + 实际打水的时间,本题假设一个人打好水,排在他后面的人接着打水的这个切换过程不消耗时间。 比如,有2个人A和B,他们打水的时间分别是3和2,只有1个水龙头,这时,如果A先打水,B后打水,那么A和B打水的时间分别为3、3+2(B排队3分钟)。 因此,所有人打水的总时间就是每个人的打水时间及每个人的排队时间的总和。 输入格 阅读详情

相关推荐

蓝桥杯 ADV-148 排队打水问题

蓝桥杯 ADV-148 排队打水问题 问题描述 有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2…………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少? 输入格式 第一行n,r (n<=500,r<=75) 第二行为n个人打水所用的时间Ti (Ti<=100); 输出格式 最少的花费时间 样例输入 3 2 1 2 3 样例输出 7 思路解...

qq_43271202的博客 1730

排队打水问题(water)

第1行:两个整数n(1<=n<=1000),m(1<=m<=100)。第2行:n个正整数,t1, t2 , ……, tn,(1<=ti<=1000),表示每个人装满水桶的时间。有n个人排队到m个水龙头去打水,他们装满水桶的时间t1, t2 ,?, tn为整数且各不相同,应如何安排他们的打水顺序才能使他们花费的总时间最少。1行,一个正整数,表示所有人的花费的最少时间。

Ganwukai的博客 898

如何实现C++动态调用动态链接库(DLL或SO)

使用函数指针来定义函数的类型,以便在动态库中找到的函数能够正确地调用。函数指针的类型必须与函数的签名(参数类型和返回类型)匹配。// 函数指针#ifdef _MSC_VER // Windows环境下的导出声明__declspec。

weixin_48438353的博客 7984

【贪心算法】排队打水

系列文章目录 第一篇【贪心算法】初步介绍 第二篇【贪心算法】删数问题 第三篇 【贪心算法】排队打水 (此篇) 一、题目 1141. 【贪心算法】排队打水(Standard IO) 时间限制:1000 ms空间限制:262144 KB具体限制 题目描述: 有n(n<=1000)个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。 输入: 输入文件共两行,第一行为n;第二行......

aliyonghang的博客 2648

从2804云台电机到桌面机械臂:一个STM32/GD32玩家的FOC驱动踩坑全记录

本文详细记录了从2804云台电机到桌面机械臂的FOC驱动开发历程,涵盖了硬件选型、驱动方案优化、软件调试等关键环节。特别分享了L6234P驱动芯片的发热问题、AS5600编码器的I2C通信陷阱以及PID调参的实战经验,为DIY爱好者提供了宝贵的参考。

weixin_26897585的博客 482

人形机器人解耦驱动腿部设计与FAST性能优化

机器人运动控制的核心在于动力学解耦与能量效率优化。通过多连杆机构设计,可以实现关节运动的独立控制,显著降低惯性叠加和能量损耗。DecARt Leg采用创新的齿轮-四杆复合机构,将腿部伸缩与摆动运动完全解耦,配合多杆踝关节传动系统,实测行走速度可达4.18m/s。这种解耦设计不仅提升了动态性能,其提出的FAST指标更为腿部构型提供了量化评估基准,在仓储物流、地形适应等场景展现出显著优势,为人形机器人运动控制提供了新的技术路径。

weixin_33759613的博客 238

排队打水问题(贪心算法)c++

有n个人排队到 r 个水龙头去打水,他们装满水桶的时间 t1, t2, …,tn 为整数且各不相等,应如何安排他们的打水顺序才能使他们花费的总时间最少?每个人打水的时间 = 排队的时间 + 实际打水的时间,本题假设一个人打好水,排在他后面的人接着打水的这个切换过程不消耗时间。比如,有2个人A和B,他们打水的时间分别是3和2,只有1个水龙头,这时,如果A先打水,B后打水,那么A和B打水的时间分别为3、3+2(B排队3分钟)。因此,所有人打水的总时间就是每个人的打水时间及每个人的排队时间的总和。

Yiping2012ABC的博客 1963

自动控制原理之控制系统的数学模型(类比神经网络学习数学模型)

控制系统的数学模型背景建模方法常用的数学模型时域数学模型的建立建立微分方程的步骤复数域模型的建立传递函数的性质系统的典型环节及传递函数比例环节惯性环节积分环节微分环节理想微分环节一阶微分环节二阶微分环节振荡环节延时环节(时滞环节) 背景 数学模型就像是真实世界的写照,它就像一个虚拟的世界,我们可以通过建模的方式了解这个真实世界的运作规律。 这一点很像强化学习,强化学习需要一个供智能体探索、学习的环境,于是,我们通常会事先建立一个虚拟的仿真环境。举个例子,对于人类来说,可能需要经过不断地尝试,甚至是生命的代价

zbp_12138的博客 6578

题目 1527: 排队打水问题

题目 有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2…………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少? 输入 第一行n,r (n< =500,r< =75) 第二行为n个人打水所用的时间Ti (Ti< =100); 数据规模和约定 其中80%的数据保证n< =10 输出 最少的花费时间 样例输入 3 2 1 2 3 样例输出 7 解题思路 本题类似于蓝桥杯题目 1523: 打水问题,本质上都是使用贪心算法,但两者需要输出的值含义

博客简介 3137

PyRoki 入门教程(二)安装与使用

PyRoki是一个用于机器人运动学优化的Python库,具有模块化设计、可扩展性和跨平台支持等特点。它支持逆运动学、轨迹优化和动作重定位等任务,采用Levenberg-Marquardt优化器提高效率。主要功能包括:基于URDF的可微分正向运动学模型、自动生成碰撞基元、通用成本因子和自定义成本函数等。PyRoki支持CPU、GPU和TPU运行,适用于从单机器人到大规模并行处理场景。目前存在一些限制,如仅支持软约束、静态形状和特定关节类型等。官方提供了多个应用示例,包括基础逆运动学、碰撞检测、轨迹优化和手部/

机器人控制与仿真应用 1252

多测师肖sir_高级金牌讲师_数据库之存储练习题(8.13.1)

实验 一、 实验要求: 理解存储过程的概念 掌握存储过程的语法格式、使用方法 掌握存 储过程的创建、执行 二、实验前提: – drop table if exists student; – Create table student – (Id varchar(255), #学号 – Name varchar(255), #姓名 – Roomid varchar(255), #班级 – Sex char(1), #性别 – Degree varchar(3) );#成绩; Insert into stud

多测师肖sir的博客 706

排队打水(c++)

有 n 个人排队到 1个水龙头前打水,他们装满水桶的时间为t1,t2,...(tn为整数且各不相等),应如何安排他们的打水顺序才能使他们花费的时间最少?最少花费时间总和为多少?共两行,第一行为n(1≤n≤1000);第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。输出这种排列方案下的总等待时间。

hi——qwq 1125

R数据分析:潜在转化分析LTA的做法和解释(一)

之前给大家写了很多潜在类别分析的教程Mplus教程:如何做潜在类别分析LCAR数据分析:用R语言做潜类别分析LCAMplus数据分析:潜在类别分析(LCA)流程(详细版)R数据分析:再写潜在类别分析LCA的做法与解释,今天继续给大家拓展一步。 今天要介绍的就是潜在转换分析,这个东西就是LCA的纵向版本。是一个专门用来研究质变的统计技巧。有一句话叫做量变起质变,你怎么知道质变到底发生没有?就用潜在转换分析。 Latent transition analysis is an extension of...

Codewar的博客 7703

贪心算法-排队打水,C语言,C++编程

有 N 个人排队到 R 个水龙头去打水,他们装满水桶的时间为整数 T1,T2,…,Tn,且各不相等,应如何安排他们的打水顺序才能使他们花费的总时间最少?T越小的人,打水越要靠前。(每个人 T总时间 = T每个人打水时间 + T每个人等待时间)第一行输入 N 个人,和水龙头数量 R;第二行输入每个水桶装满水的时间T。输出打水总的花费时间。

weixin_50329825的博客 1617

【ComfyUI专栏】ComfyUI 数字人方案-ComfyUI-EchoMimic

EchoMimic是一个基于图片和语音的数字人生成方案,通过ComfyUI节点实现。该方案安装简单,需下载特定模型文件(Unet、AudioProcessor和VAE)并保存本地。相比其他数字人生成方案,其节点操作更简便,支持多种Pose姿态选择,并能结合视频内容进行姿态同步,通过音频同步口型实现动态内容创建。生成的数字人效果直观,适用于快速创建个性化数字形象。

技术与管理的平衡木- 464

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

贪心算法 —— 排队打水问题1

1319:【例6.1】排队接水 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 11724 通过数: 5192 【题目描述】 有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。 【输入】 共两行,第一行为n(1≤n≤1000);第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。 【输出】 有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种

菜瓜变菜鸟 6538

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

贪心算法——排队问题

排队问题1 问题描述: 有n个同学在一个水龙头排队打水,每个人的打水时间是ti,请你思考,能不能找出一种排队次序,使得所有同学打完水的总时间最少 输入 共两行 第1行,排队人数n(n小于等于100) 第2行,n个数,n个人打水时所要用的时间ti(10 ≤ ti ≤ 60),两两之间用空格隔开 输出 每个人都打完水的时间总和的最小情况 样例输入 6 3 7 1 9 5 11 【样例输出】 91 ...

Psychosocial的博客 9574

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

排队打水问题(贪心)

排队打水问题(贪心算法)        有n个人排队到r个水龙头打水,他们装满水的时间为 t1t_1t1​,t2t_2t2​,t3t_3t3​,……,tnt_ntn​为整数且各不相等,应如何安排他们打水顺序才能使他们花费时间最少(含等待时间)? 。#### 【分析】      &...

qq_45949914的博客 8248

【贪心算法T】排队打水问题(多处最优服务次序问题)

【问题描述】 有n个人排队到r个水龙头去打水,他们装满水桶的时间为t1,t2,…,tn为整数,且各不相同。求所有人打完水所用到的时间最少时间? n和r都小于10 输入 两行, 第一行,人数n和水龙头数r; 第二行,n个数代表每个人打水所用的时间。 输出 打水所用的最少时间 样例输入 4 2 2 6 4 5 样例输出 23 【算法分析】 多处最优服务次序问题 【算法实现】 #include<iostream> #include<algorithm> #include<ve

Woo~ 2749

“排队打水”问题的贪心策略

若将每人打水时间从小到大排序,可使总的等待时间最短。

hnjzsyjyj的专栏 590

贪心算法——排队打水问题

*/6.3 排队打水问题:有n个人排队到r个水龙头去打水,他们装满水桶的时间为t1,t2,…,tn为正整数且个不相等。 应如何安排他们打水顺序才能使他们花费的时间最少。 算法分析:时间总和=等待时间+装水时间。采用贪心思想。先sort(),默认将装水时间从小到大排序。 n个人,r个水龙头,可以以水龙头为序将队伍序分割成n/r个小组,每小组的成员分别对应r个位置。 实际上就是将人依序分成r个小队打水...

yutian74的博客 6496

【贪心算法】排队接水

有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti​,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

weixin_45795497的博客 713

信息学奥赛第九节 —— 贪心算法(需要安排几位师傅加工零件 + 排队打水问题)

贪心算法的特点 对于问题求解时,总是做出在当前来看是最好的选择的策略,即贪心算法不从整体来考虑问题。贪心算法与排序、高精度、背包等算法不同,没有一个特定的模板来表达贪心算法的过程。 贪心的步骤 抽象出题目的数学模型 把需要解决的问题分解为许多个小问题 选择一个策略,这个策略对于解决所有的小问题一定是通用的 证明所选择的策略一定适用于所有的情况 把子问题的解合并,就得到了全局的最优解 贪心的证明 反证法 数学归纳法 决策的包容性 范围的缩放 邻项交换法 贪心的入门模型 如图所示,在上图中,最外面的方

smallrain6的博客 2680

蓝桥杯入门3—贪心算法

蓝桥杯入门3—贪心算法

qq_52241267的博客 447
上一篇: 【搜索与回溯算法】泡泡龙
下一篇: 【USACO题库】1.5.3 Superprime Rib特殊的质数肋骨
开朗的坤坤
博客等级 码龄5年 11粉丝 26原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值