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

别再搞混了!用示波器实测SVPWM:相电压、线电压、端电压波形到底长啥样?(附TI/ST官方笔记解读)

本文详细解析了SVPWM波形实测中的相电压、线电压和端电压的区别与测量技巧,结合TI/ST官方笔记,揭示了马鞍形波形的形成原理及常见误区。通过示波器实测案例,帮助电力电子工程师准确理解并应用这些关键概念,提升电机控制系统的调试效率。

weixin_30632883的博客 433

【贪心算法】排队打水

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

aliyonghang的博客 2648

在 Ubuntu 上安装和配置 PostgreSQL 实录

本文介绍了在Ubuntu系统上安装和配置PostgreSQL数据库的完整步骤。主要内容包括:1)通过官方源或PPA源安装最新版本;2)修改配置文件(postgresql.conf和pg_hba.conf)以允许远程访问;3)设置postgres用户密码;4)创建新用户并配置权限;5)防火墙设置和重启服务;6)验证安装和远程连接方法。文章提供了详细的命令行操作指导,帮助用户完成从安装到远程访问的全部配置过程。

qq_58168857的博客 1207

华为海思2026届数字IC秋招笔试高频考点解析与实战技巧(2025最新版)

本文深入解析华为海思2026届数字IC秋招笔试的高频考点与实战技巧,涵盖时序优化、低功耗设计、DFT规则等核心模块。针对2025年最新真题,提供详细的解题思路和工程经验,帮助考生高效备考。特别关注SystemVerilog约束随机测试等新增考点,助力考生在秋招笔试中脱颖而出。

m2n3o4p5的博客 415

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

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

Yiping2012ABC的博客 1963

微信小程序后台定位与实时位置更新的实战指南

本文提供了微信小程序实现后台定位与实时位置更新的完整实战指南。针对小程序退到后台后位置更新中断的痛点,详细解析了基于`startLocationUpdateBackground`API的后台定位解决方案。内容涵盖从隐私协议配置、项目权限声明,到授权、启动、监听、停止的核心代码流程,并分享了真机调试、性能优化及权限引导等关键避坑经验,帮助开发者构建稳定可靠的后台位置服务。

weixin_29008055的博客 468

题目 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

WPF实战项目十七(客户端):数据等待加载弹框动画

1、在Common文件夹下新建文件夹Events,新建扩展类UpdateLoadingEvent。2、新建一个静态扩展类DialogExtensions来编写注册和推送等待消息弹框方法。3、在ViewModel中添加实现类NavigationViewModel。5、在View文件夹下新建用户控件ProgressView.xmal。4、在主窗体MainView.xmal中给弹窗界面命名。6、在MainView.xmal.cs中注册消息。

yigu4011的博客 2347

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 132

排队打水(c++)

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

hi——qwq 1125

3篇1章6节:R基础绘图之图形的保存和导出技巧

高质量图形导出是R语言用户在数据分析和科研工作中的重要技能。通过合理控制图形的分辨率、选择合适的颜色管理方案和文件格式,以及掌握批量保存图形的技巧,可以显著提升图形的展示效果和应用范围。这不仅有助于提高研究成果的展示质量,还能在各种专业场合中展现数据分析的精确性和美观性。

MD Code 1481

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

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

weixin_50329825的博客 1617

MCU-内部flash模拟成EepRom(重新梳理)

通过fee写数据Data的过程中,数据会mapping一个虚拟地址,这个虚拟地址就是你的身份,在向flash写数据的过程中会写入很多相同虚拟地址的不同数据,在读取或切页的过程中,遍历数据只会认为最下面第一个的虚拟地址所持有的数据是有效数据,其他的都是老数据,可以丢弃。模拟成eeprom的两个eep_page写数据逻辑就是,先在eep_page0写数据,eep_page0写满后,将eep_page0的有效数据copy到eep_page1,之后擦eep_page0;

xiandang8023的博客 711

计算机控制技术及应用

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

贪心算法 —— 排队打水问题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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

贪心算法——排队问题

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

Psychosocial的博客 9574

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

排队打水问题(贪心)

排队打水问题(贪心算法)        有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、付费专栏及课程。

余额充值