华为OD机试【统一限载货物数最小值】(java)(200分)

1、题目描述

火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度 2K 辆中转车(K辆干货中转车,K 辆湿货中转车)货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依次装货到中转车,一个供货商的货只能装到一辆车上不能拆装,但
是一辆车可以装多家供货商的货:中转车的限载货物量由小明统一指定,在完成货物中转的前提下,请问中转车的统一限载货物数最小值为多少。

2、输入描述

第一行 length 表示供货商数量 1 <= length <= 104;
第二行 goods 表示供货数数组 1 <= goods[i] <= 104;
第三行 types[i]表示对应货物类型,types[i]等于 0 或者 1,其中 0 代表干货,1 代表湿货;
第四行 k 表示单类中转车数量 1 <= k <= goods.length;

3、输出描述

运行结果输出一个整数,表示中转车统一限载货物数。
备注:中转车最多跑一趟仓库。
用例:

输入
4
3 2 6 3
0 1 1 0
2输出
6ps:
货物1和货物4为干货,由2辆干货中转车中转,每辆车运输一个货物,限载为3
货物2和货物3为湿货,由2辆湿货中转车中转,每辆车运输一个货物,限载为6
这样中转车统一限载货物数可以设置为6(干货车和湿货车限载最大值),是最小的取值

温馨提示!!!
华为OD机试考试官方会对考生代码查重。华为od机试因为有题库所以有很大的概率抽到原题。如果碰到了题库中的原题,千万不要直接使用题解中的代码,一定要做些修改,比如代码中的变量名,除此之外,代码的组织结构和逻辑也要进行一些改变,所以在日常的刷题中,要提前编写好属于自己的代码。

4、题解

根据题目中的描述,遍历每一个货物,判断是干货还是湿货,然后判断当前车是否能够装下这个货物,若当前能够装下,则将货物装入车,若装不下时,若当前的干货车或湿货车已经达到了最大数量,则返回无法按照限制装货,否则,将干货车或湿货车数量+1,将货物装入新的车,计算出最大最小限载数,使用二分法不断地求解满足要求的最小限载数。
代码如下:

public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = Integer.parseInt(sc.nextLine());int[] goods = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 0代表干货,1代表湿货int[] types = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 单类中转车数量int k = sc.nextInt();// 初始最小限和最大限载货物数int minLimit = 0;int maxLimit = 0;for (int i = 0; i < n; i++) {minLimit = Math.max(minLimit, goods[i]);maxLimit += goods[i];}while (minLimit <= maxLimit) {int limit = (minLimit + maxLimit) / 2;int dryCarCount = 0;int wetCarCount = 0;int dryCarSum = 0;int wetCarSum = 0;// 是否可以限载货物boolean isCan = true;// 遍历供货商,按照限载货物数装货到中转车for (int i = 0; i < n && isCan; i++) {if (types[i] == 0) {// 干货if (dryCarSum + goods[i] <= limit) {dryCarSum += goods[i];} else {if (dryCarCount + 1 == k) {// 超过限载货物数且已经达到干货中转车数量上限isCan = false;} else {// 超过限载货物数但还未达到干货中转车数量上限dryCarCount += 1;dryCarSum = goods[i];}}} else {// 湿货if (wetCarSum + goods[i] <= limit) {wetCarSum += goods[i];} else {if (wetCarCount + 1 == k) {// 超过限载货物数且已经达到湿货中转车数量上限isCan = false;} else {// 超过限载货物数但还未达到湿货中转车数量上限wetCarCount += 1;wetCarSum = goods[i];}}}}if (isCan) {maxLimit = limit - 1;} else {minLimit = limit + 1;}}System.out.println(minLimit);
}

执行结果如下:
在这里插入图片描述

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

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

相关文章

二维数组 和 变长数组

在上一期的内容中&#xff0c;为诸君讲解到了一维数组&#xff0c;在一维数组的基础上&#xff0c;C语言中还有着多维数组&#xff0c;其中&#xff0c;比较典型且运用较为广泛的就是我们今天的主角——二维数组 一 . 二维数组的概念 我们把单个或者多个元素组成的数组定义为一…

VScode 修改 Markdown Preview Enhanced 主题与字体

VScode 修改 Markdown Preview Enhanced 主题与字体 1. 修改前后效果对比2. 修改主题2.1 更改默认主题2.2 修改背景色 3. 修改字体 VS Code基础入门使用可查看&#xff1a; VS Code 基础入门使用&#xff08;配置&#xff09;教程 其他Vs Code 配置可关注查看&#xff1a; Vs C…

2024年如何选什么版本FL Studio才适合自己编曲?

fl studio是什么软件 水果编曲软件 FL Studio&#xff0c;全称为Fruity Loops Studio&#xff0c;是一款全能音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;&#xff0c;集编曲、录音、剪辑、混音等多种功能于一身。 FL Studio最初名为Fruity Loops&#xff0c;因…

外网如何访问内网?快解析

由于公网IP资源短缺&#xff0c;我们的电脑大多处于内网环境&#xff0c;如何在外网访问内网电脑&#xff0c;成为一个令人头疼的问题&#xff0c;下面我给大家推荐一个非常实用的方法。 1&#xff1a;访问快解析下载安装快解析服务器 2&#xff1a;运行软件&#xff0c;点击“…

2.4 输入和显示

本节必须掌握的知识点&#xff1a; 示例五源代码 代码分析 汇编解析 2.4.1 示例五 ■格式化输入函数scanf scanf函数可以从键盘读取输入的信息。scanf函数同样可以像printf函数那样&#xff0c;通过转换说明“%d”来限制函数只能读取十进制数。scanf函数的参数为可变参数…

【算法训练 day25 修剪二叉搜索树、将有序数组转化为二叉搜索树、把二叉树搜索转化为累加树】

目录 一、修剪二叉搜索树-LeetCode 669思路实现代码个人代码视频链接代码 个人问题 二、将有序数组转化为二叉搜索树-LeetCode 108思路实现代码个人问题 三.把二叉树搜索转化为累加树-LeeCode 538思路实现代码个人问题 一、修剪二叉搜索树-LeetCode 669 Leecode链接: leetcode…

项目管理-计算题公式【复习】2/2

2.【成本】相关公式 2.1挣值分析 三个参数 &#xff08;1&#xff09;计划价值(PV&#xff0c;Plan Value): PV&#xff1a;计划工作分配的经批准的预算&#xff0c;是为完成某活动或 WBS 组成部分而准备的一份经批准的预算。不包括管理储备。 注意&#xff1a;按照计划截止目…

LwIP 之九 详解 UDP RAW 编程、示例、API 源码、数据流

我们最为熟知的网络通信程序接口应该是 Socket。LwIP 自然也提供了 Socket 编程接口,不过,LwIP 的 Socket 编程接口都是使用最底层的接口来实现的。我们这里要学习的 UDP RAW 编程则是指的直接使用 LwIP 的最底层 UDP 接口来直接实现应用层功能。这里先来一张图,对 LwIP 内部…

React 和 Vue两个流行的前端 JavaScript 框架有什么区别?

设计理念&#xff1a; React 是由 Facebook 开发的&#xff0c;专注于构建 UI 组件。它采用了一种声明式的、组件化的开发模式&#xff0c;通过使用虚拟 DOM 来实现高效的 UI 更新。 Vue 是由尤雨溪开发的&#xff0c;旨在提供一个灵活且易于上手的框架。Vue 也支持组件化开发…

电商技术揭秘营销相关系列文章合集(4)

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 文章目录 引言集合说明集合文章列表 引言 在数字化浪潮的推动下&#xff0c;电商行…

【35分钟掌握金融风控策略25】定额策略实战2

目录 基于收入和负债的定额策略 确定托底额度和盖帽额度 确定基础额度 基于客户风险评级确定风险系数 计算最终授信额度 确定授信有效期 基于收入和负债的定额策略 在实际生产中&#xff0c;客户的收入和负债数据大多无法直接获得&#xff0c;对于个人的收入和负债数据&…

【JavaEE】Spring Boot 入门:快速构建你的第一个 Spring Boot 应用

目录 第一个SpringBoot程序介绍项目创建创建项目目录介绍输出Hello World 第一个SpringBoot程序 介绍 在学习SpringBoot之前, 我们先来认识⼀下Spring 我们看下Spring官⽅(https://spring.io/)的介绍 可以看到, Spring让Java程序更加快速, 简单和安全. Spring对于速度、简单…

【论文阅读笔记】MapReduce: Simplified Data Processing on Large Clusters

文章目录 1 概念2 编程模型3 实现3.1 MapReduce执行流程3.2 master数据结构3.3 容错机制3.3.1 worker故障3.3.2 master故障3.3.3 出现故障时的语义 3.4 存储位置3.5 任务粒度3.6 备用任务 4 扩展技巧4.1 分区函数4.2 顺序保证4.3 Combiner函数4.4 输入和输出的类型4.5 副作用4.…

用balenaEtcher烧录ubuntu的iso文件都失败,所以选用了另一种烧录的软件Rufus,然后烧录成功了+安装ubuntu的坑

https://releases.ubuntu.com/bionic/进入网页下载ubuntu 选择烧录软件将下载的Ubuntu烧录到U盘中 之前用这个U盘烧录过一次&#xff0c;成功了&#xff0c;后来应该是U盘受损或者是什么其他原因使得用这个U盘总是烧录失败 换思路&#xff1a;由于一直使用balenaEtcher烧录ubu…

3 ESP32的PWM控制

Esp32的PWM控制也配置库函数&#xff0c;以下就是PWM所用到的函数 1 PWM通道初始化设置 函数原型uint32_t ledcSetup(uint8_t chan, uint32_t freq, uint8_t bit_num)函数功能设定指定LEDC通道的PWM信号频率和占空比分辨率返回值通道PWM信号的频率参数说明chan&#xff08;LE…

WebView基础知识以及Androidx-WebKit的使用

文章目录 摘要WebView基础一、启动调整模式二、WebChromeClient三、WebViewClient四、WebSettings五、WebView和Native交互 Androidx-WebKit一、启动安全浏览服务二、设置代理三、安全的 WebView 和 Native 通信支持四、文件传递五、深色主题的支持六、JavaScript and WebAssem…

ipa 功能包调试,分区算法,覆盖算法测试

参考 wiki 流网络 flow network 解释 相关文章 ipa 分区算法 ipa 分区算法总结&#xff0c;部分算法图解 环境 ubuntu20&#xff0c;ros 版本 noetic 运行测试 按照 readme 提示进行测试&#xff0c;跳过第一个步骤&#xff0c;并不需要 turtlebot3。 执行第三个 launch 报…

vue element checkbox的实现

实现多选非常简单: 手动添加一个el-table-column&#xff0c;设type属性为selection即可&#xff1b;默认情况下若内容过多会折行显示&#xff0c;若需要单行显示可以使用show-overflow-tooltip属性&#xff0c;它接受一个Boolean&#xff0c;为true时多余的内容会在 hover 时以…

Java8 快速实现List转map 、分组、过滤等操作

Java 8 是 Java 编程语言的一个重要版本&#xff0c;它引入了许多新特性和改进&#xff0c;使得 Java 开发变得更加高效和现代。 下面我们就来使用Java8 快速实现List转map 、分组、过滤等操作。 定义1个用户对象 public class User {private Integer id;private String nam…

计算机通信

一.进程和线程的区别? 1. 进程是资源分配的最小单位, 线程是cpu进行调度的最小单位。 2. 一个进程可以看做一个运行的程序, 一个进程中可以包含多个线程, 线程在进程内执行。 3. 多进程是指操作系统能同时运行多个任务&#xff08;程序&#xff09;&#xff0c;多线程是指在同…