统一限载货物数最小值

题目描述

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

输入描述

第一行length表示供货商数量 1<= length <= 10^4

第二行goods表示供货数数组 1 <= goods[i] <= 10^4

第三行types表示对应货物类型,types[i]等于0或者10代表干货,1代表湿货

第四行k表示单类中转车数量1 <= k <= goods.length

输出描述

一个整数,表示中转车统一限载货物数

补充说明

中转车最多跑一趟仓库

示例

示例1

输入

4
3 2 6 3
0 1 1 0
2

输出

6

说明

示例2

输入

4
3 2 6 8
0 1 1 1
1

输出

16

说明

解题思路

已知

  1. 干货、湿货分别用不同的车运输,两种类型车数量一致;
  2. 一个供货商的货只能装到一辆车上;
  3. 需要一次运输完成;

思路
求取单类货物最小限载数(平均值与最大货物数比较)及单类货物总值,每一次以中位数查找是否存在满足的情况,直到求取最终值。

代码示例

/*** 获取最小统一限载货物数* @param goods 供货数* @param types 货物类型,0-干货 1-湿货* @param k 单类中转车数量* @return 最小统一限载货物数*/
public int loadLimit(int[] goods, int[] types, int k) {LinkedList<Integer> dryList = new LinkedList<>();LinkedList<Integer> wetList = new LinkedList<>();// 干物最大值、湿物最大值、干物总值、湿物总值int dryMax = 0, wetMax = 0, drySum = 0, wetSum = 0;for (int i = 0, l = goods.length; i < l; i++) {if(types[i] == 0) {drySum += goods[i];dryMax = Math.max(dryMax, goods[i]);dryList.add(goods[i]);} else {wetSum += goods[i];wetMax = Math.max(wetMax, goods[i]);wetList.add(goods[i]);}}return Math.max(binarySearch(dryList, k, dryMax, drySum), binarySearch(wetList, k, wetMax, wetSum));
}/*** 二分查找最小限载* @param goods 单类货物集合* @param k 车辆数* @param weightMax 单类货物最大供货数* @param weightSum 单类货物供货数总和* @return 最小限载数*/
private int binarySearch(List<Integer> goods, int k, int weightMax, int weightSum) {int min = Math.max(weightMax, (weightSum + k - 1) / k);int max = weightSum;while(min < max) {int mid = (min + max) / 2;if(check(goods, new int[k], 0, mid)) {max = mid;} else {min = mid + 1;}}return min;
}/*** 校验指定限载下是否有解* @param goods 货物集合* @param arr 车载数组* @param index 当前处理货物下标* @param weight 限载数* @return*/
private boolean check(List<Integer> goods, int[] arr, int index, int weight) {// 货物遍历完成,直接返回if(index >= goods.size()) {return true;}for(int i = 0, l = arr.length; i < l; i++) {if(arr[i] + goods.get(index) <= weight) {arr[i] += goods.get(index);// 递归下一个货物if(check(goods, arr, index + 1, weight)) {return true;}// 不满足条件时将货物取出arr[i] -= goods.get(index);}}return false;
}

【华为OD机试】统一限载货物数最小值相关推荐

  1. 华为OD机试 - 统一限载货物数最小值(Java JS Python)

    题目描述 火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车(K辆干货中转车,K辆湿货中转车). 货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依次 ...

  2. 华为OD机试 - 不含101的数

    题目描述 小明在学习二进制时,发现了一类不含 101的数,也就是: 将数字用二进制表示,不能出现 101 . 现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个不含 101 的数? 输入描述 ...

  3. 华为OD机试真题 Python 实现【统一限载最小值】【2023 Q1 | 200分】

     所有题目均有三种语言实现.C++ 实现目录.Python实现目录.Java实现目录 题目 题目描述 火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车( K 辆干货中转车 ...

  4. 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明

    刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...

  5. 华为OD机试(A、B卷)、机考,200分的题目整理如下,冲满分必备

    文章目录 关于华为 od 题库的说明(2023-05-16 更新本文) 关于订阅华为 OD 机试题库的后续问题 华为 OD 机试 真题,新题库,50 道 200 分题 华为 od 岗的薪资待遇 华为 ...

  6. 华为od机试(适用B卷),独家整理 已参加机试人员的实战技巧

    华为 OD 机试过程中,都会碰到哪些问题呢,橡皮擦今天为大家整理一下,希望对即将参加机试的[你]有所帮助. 这个是一系列关于华为 OD 的各种问题,你也可以在评论区提问 每篇博客精选 OD 参与者的 ...

  7. 华为OD机试2023年最新题库(JAVA、Python、C++)

    我是一名软件开发培训机构老师,我的学生已经有上百人通过了华为OD机试,学生们每次考完试,会把题目拿出来一起交流分享. 2023年5月份题库已经更新为OD统一考试(B卷),题库由三部分组成: 1.202 ...

  8. 华为OD机试真题2023(JavaScript)

    华为机试题库已由2022版换为2023版   华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分.总分为400分,150分钟考试时间.之前通过为1 ...

  9. 2023 华为OD机试备考攻略 以及题库目录分值说明 考点说明 (A卷+ B卷)

    文章目录 华为OD在线刷题OJ 华为题库 更新说明 支持的语言 题库目录 华为OD统一考试[A卷]题库-100分 华为OD统一考试[A卷]题库-200分 华为OD统一考试[B卷]题库-100分 华为O ...

最新文章

  1. mysql遇到your password does not satisfy the current policy requirements
  2. java在图片下方写文字_Java画图给图片底部添加文字标题
  3. 洛谷 P1414 又是毕业季II (多个数的最大公因数)
  4. mysql学习笔记01-创建数据库
  5. 前端解决跨域的九种方法
  6. 证监会将开启私募机构新三板做市试点
  7. CSS选择器优先级计算
  8. VB2010中的MediaPlayer控件在哪?
  9. ISO 27001信息安全管理体系认证
  10. Excel如何随机抽取姓名或其他数据
  11. SAP PI PO XSLT Mapping of Adapter-Specific Message Attributes
  12. ios vue 添加本地音乐_苹果手机vue怎么添加自己的音乐
  13. 计算机能力提升选网络研修,教师计算机能力提升个人研修计划
  14. 利用毒株的accession号,批量下载fasta格式的文件
  15. 2022-2027年中国自动体外除颤器行业发展监测及投资战略研究报告
  16. Qt中使用httpServer框架
  17. Java——使用多线程模拟真实高并发业务并保证安全性(一)
  18. macOS 切换python版本
  19. 统计每一个用户(手机号)所耗费的上行流量,下行流量,总流量
  20. 如何辨别优劣高防服务器?

热门文章

  1. 数据囤积者,有没有“蓝瘦香菇”?
  2. 【vuex是什么?有什么用?】
  3. 20190818考试反思
  4. 使用spring-boot快速生成quartz所需的表
  5. python图像识别学习
  6. 每周推荐短视频:GDP 增速放缓,对于企业意味着什么?
  7. idea maven projects 工具栏按钮的作用
  8. jboss as 6 pojo cache配置使用
  9. python实现gui编程_怎样用Python3实现GUI编程?
  10. LaTeX中自定义enumerate的编号格式