统一限载货物数最小值
题目描述
火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车(K辆干货中转车,K辆湿货中转车)。
货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依次装货到中转车上,一个供货商的货只能装到一辆车上,
不能拆装,但是一辆车可以装多家供货商的货;
中转车的限载货物量由小明统一制定,在完成货物中转的前提下,请问中转车的统一限载货物数最小值为多少。
输入描述
第一行length
表示供货商数量 1<= length <= 10^4
第二行goods
表示供货数数组 1 <= goods[i] <= 10^4
第三行types
表示对应货物类型,types[i]等于0
或者1
,0
代表干货,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
说明
解题思路
已知
- 干货、湿货分别用不同的车运输,两种类型车数量一致;
- 一个供货商的货只能装到一辆车上;
- 需要一次运输完成;
思路
求取单类货物最小限载数(平均值与最大货物数比较)及单类货物总值,每一次以中位数查找是否存在满足的情况,直到求取最终值。
代码示例
/**
* 获取最小统一限载货物数
* @param goods 供货数
* @param types 货物类型,0-干货 1-湿货
* @param k 单类中转车数量
* @return 最小统一限载货物数
*/
public int loadLimit(int[] goods, int[] types, int k) {
LinkedList<Integer> dryList = new LinkedList<>();
LinkedList<