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

该博客讨论了如何在确保货物中转的前提下,通过调度2K辆中转车(K辆干货,K辆湿货),找到最小的货物限载数。问题涉及到供货商数量、货物类型和中转车限制,博主提供了解题思路,包括计算单类货物最小限载数,并利用中位数查找法找到解决方案。
摘要由CSDN通过智能技术生成

统一限载货物数最小值

题目描述

火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度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<
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值