acwing 913. 排队打水和最短时间处理联系

简介: acwing 913. 排队打水和最短时间处理联系

acwing 913. 排队打水

n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?

输入格式

第一行包含整数n

第二行包含 n 个整数,其中第i个整数表示第i 个人装满水桶所花费的时间 ti

输出格式

输出一个整数,表示最小的等待时间之和。

数据范围
image.png

image.png

输入样例:

7
3 6 1 4 2 5 7

输出样例:

56

思考过程/解题步骤:

这题考察的是一个贪心的思想,需要我们如何选取来达到最优的等待时间即最短的等待时间

image.png

下面给出这种贪心猜测的证明:

反证法:

image.png

这种思想可以额外引申到操作系统的进程调度算法:最短作业优先处理。这样子我们就可以很清楚的知道假设我们只想要得到最短等待时间之和这一项指标的话,那么我们就可以参照这里的思想去理解。同时,平时考试的时候为什么大部分人需要采取的策略是先易后难,跟这里的思想也许也有一定的关系,更少的空白等待思考时间。还有这里给了我一个启发,生活中如果遇到多件不能并发处理并且都不是很紧急但是又都很有必要做的事情,我以后就要根据时间长短优先处理能够先处理的,这样可以减少空白等待的时间。

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(String.valueOf(reader.readLine()));
        int[] arr = new int[n];
        String[] num = reader.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(num[i]);
        }
        // 先排序
        Arrays.sort(arr);
        long res = 0;
        for (int i = 0; i < n; i++) {
            // 第i名打水的后面会有n-i-1个等待的,因此等待的时间就是arr[i] * (n-i-1)
            res += (arr[i] * (n-i-1));
        }
        writer.write(res + "\n");
        writer.flush();
        writer.close();
        reader.close();
    }
}


相关文章
|
Kubernetes Java Docker
Java程序在K8S容器部署CPU和Memory资源限制相关设置
背景 在k8s docker环境中执行Java程序,因为我们设置了cpu,memory的limit,所以Java程序执行时JVM的参数没有跟我们设置的参数关联,导致JVM感知到的cpu和memory是我们k8s的work node上的cpu和memory大小。
9364 0
|
JavaScript 前端开发 开发者
jQuery 下载与快速入门指南
jQuery 下载与快速入门指南
836 0
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战
【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战
2306 0
|
存储 SQL 人工智能
AnalyticDB for MySQL:AI时代实时数据分析的最佳选择
阿里云云原生数据仓库AnalyticDB MySQL(ADB-M)与被OpenAI收购的实时分析数据库Rockset对比,两者在架构设计上有诸多相似点,例如存算分离、实时写入等,但ADB-M在多个方面展现出了更为成熟和先进的特性。ADB-M支持更丰富的弹性能力、强一致实时数据读写、全面的索引类型、高吞吐写入、完备的DML和Online DDL操作、智能的数据生命周期管理。在向量检索与分析上,ADB-M提供更高检索精度。ADB-M设计原理包括分布式表、基于Raft协议的同步层、支持DML和DDL的引擎层、高性能低成本的持久化层,这些共同确保了ADB-M在AI时代作为实时数据仓库的高性能与高性价比
|
存储 关系型数据库 MySQL
阿里云域名注册创建新信息模板审核多长时间?
在阿里云注册域名,域名所有者中没有信息模板,新创建的信息模板已经提交,有点着急,什么时候可以审核通过?大约需要20分钟左右
1671 0
阿里云域名注册创建新信息模板审核多长时间?
|
小程序 JavaScript 前端开发
微信小程序(十三)小程序弹窗wx.showToast及wx.showModal
我这版的小程序中,没有使用到确定取消那样的弹窗,基本上用到的就是,加载中,成功或者失败那种消息提示类的弹窗。 微信本身给我们提供了一个这样的弹窗wx.showToast(Object object),挺好用的,我也没有再去折腾第三方组件的消息提醒弹窗。
700 0
|
SQL 关系型数据库 MySQL
数据库设计:防止MySQL字段名与关键字相撞,保护数据完整性!
数据库设计:防止MySQL字段名与关键字相撞,保护数据完整性!
1139 0
|
存储 消息中间件 监控
|
存储 前端开发 异构计算
简单介绍Skia原理
Skia是一个跨平台的2D图形库。其底层原理包括:画布(Canvas),绘制引擎(Paint Engine),渲染管线(Render Pipeline),影子图片(Skia Pictures),路径(Path)
简单介绍Skia原理

热门文章

最新文章