华为OD题目:统一限载货物数最小值

2023-11-09

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

题目描述
火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车K辆干货中转车,K辆湿货中转车)。货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依次装货到中转车,一个供货商的货只能装到一辆车上不能拆装,但是一辆车可以装多家供货商的货;
中转车的限载货物量由小明统一指定,在完成货物中转的前提下,请问中转车的统一限载货物数最小值为多少
输入描述
。第一行 length 表示供货商数量 1 <= length <= 10^4
第二行 goods 表示供货数数组 1 <= goods <= 10^4o
第三行 types表示对应货物类型,types[等于0或者1,:其中0代表干货,1代表湿货
第四行 k表示单类中转车数量 1 <= k <= goods.length
输出描述
运行结果输出一个整数,表示中转车统一限载货物数
备注
中转车最多跑一趟仓库

示例1
输入:
4
3 2 6 3
0 1 1 0
2

输出:
6

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

说明:
货物1为千货,由1两工货中转车中转,限载为3
货物2、货物3和货物4为湿货,由1两湿货中转车中转,限载为16
这样中转车统一限载货物数可以设置为16 (千货车和湿货车限载最大值),是最小的取值

public class My {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String lenStr = sc.nextLine();
        int len = Integer.parseInt(lenStr);


        String[] strings = sc.nextLine().split(" ");
        int[] goods = Arrays.stream(strings).mapToInt(Integer::parseInt).toArray();

        String[] typeStr = sc.nextLine().split(" ");
        int[] types = Arrays.stream(typeStr).mapToInt(Integer::parseInt).toArray();

        int k = Integer.parseInt(sc.nextLine());
        int result = getResult(len, goods, types, k);
        System.out.println(result);

    }

    public static int getResult(int len, int[] goods, int[] types, int k) {
        int left = 0;
        int right = 0;
        for (int i = 0; i < len; i++) {
            left = Math.max(left, goods[i]);
            right += goods[i];
        }

        while (left < right) {
            int mid = (left + right) / 2;
            if (canDivide(len, goods, types, k, mid)) {
                right = mid;
            }else {
                left = mid + 1;
            }
        }
        return left;

    }

    public static boolean canDivide(int len, int[] goods, int[] types, int k, int limit) {
        int dryCount = 0;
        int wetCount = 0;
        int drySum = 0;
        int wetSum = 0;

        for (int i = 0; i < len; i++) {
            //0-干货, 1-湿货
            if (types[i] == 0) {
                //看这一批 加上 当前货物是否在容量内
                if (drySum + goods[i] <= limit) {
                    drySum += goods[i];
                }else {
                    //如果超出容量了,则需要再加车
                    if (dryCount + 1 == k) {
                        // 没有可用的干货车了,则说明此limit无法完成所有货物的运输,直接返回false
                        return false;
                    }else {
                        // 有可用的干货车,则说明已用掉的干货车数量dryCarCount++,新的干货车装入当前货物goods[i]
                        dryCount++;
                        drySum = goods[i];
                    }
                }
            }else {
                if (wetSum + goods[i] <= limit) {
                    wetSum += goods[i];
                }else {
                    if (wetCount + 1 == k) {
                        return false;
                    }else {
                        wetCount++;
                        wetSum = goods[i];
                    }
                }
            }
        }
        return true;
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD题目:统一限载货物数最小值 的相关文章

随机推荐

  • 【深度学习环境搭建(一)】cuda和pytorch

    深度学习环境搭建 一 cuda和pytorch 系统配置 Python环境配置 CUDA环境配置 pytorch环境配置 系统配置 服务器型号 Dell PowerEdge R730 硬件 CPU Intel Xeon CPU E5 265
  • java date转换timestamp_Java Date转Timestamp

    Java Date转Timestamp 1 Java Date转Timestamp的介绍 我们可以使用java sql Timestamp类的构造函数在Java中将Date转换为Timestamp Timestamp类的构造函数接收长值作为
  • Python生成allure测试报告,allure使用详细说明

    pytest框架自带一个测试报告 内容也相对全面 但是可读性差点 allure生成的测试报告 可改造性强 看起来也美观 使用过程在此总结一下 一 生成allure测试报告 1 下载安装allure pytest插件 我一般都是在pychar
  • bug总结之为什么每次提升完类之后,改变原来类对应的代码位置,UI找不到原来的界面ui类了

    这边注意以下 自己给自己写的一个bug 当你提升完一个类之后 比如qcustomplot类 原先是放在mainwindow cpp同一级目录下 原先位置 后面想把qcustomplot类新建一个qcustomplot文件夹下 那需要做什么
  • 小程序跳转至企业微信客服wx.openCustomerServiceChat

    从小程序跳转至企业微信客服 小程序后台地址 https mp weixin qq com wxamp home guide 扫码登录自己的小程序 第一步 在小程序管理后台的 功能 客服 微信客服 处 填写对应的企业ID 完成绑定 第二步 在
  • CenterFace解读 轻量级anchor_free人脸检测器

    论文地址 https arxiv org ftp arxiv papers 1911 1911 03599 pdf github地址 https github com Star Clouds centerface 此篇文章是参考的Objec
  • 用php的chr和ord函数实现字符串和ASCII码互转

    http shenyongqang blog 163 com blog static 22439113201002941856838 chr和ord函数是用来字符串和ASCII码互转的 ASCII码是计算机所能显示字符的编码 它的取值范围是
  • 浅谈什么是闭包

    什么是闭包 我个人理解为 闭包就是能够读取其他函数内部变量的函数 由于在Javascript语言中 只有函数内部的子函数才能读取局部变量 因此可以把闭包简单理解成 定义在一个函数内部的函数 实际使用场景 封装方法的时使用callback回调
  • CAN与CANOpen(一)

    CAN与CANOpen 一 基本概念 CAN与CANOpen 二 报文格式 CAN与CANOpen 三 错误处理 CAN与CANOpen 四 CANOpen对象字典 CAN与CANOpen 五 PDO和SDO CAN与CANOpen 六 网
  • 【面试总结】--tomcat调优方案

    前段时间参加面试 面试过程中提到服务器的调优方案 这里总结一下 首先说一下tomcat的调优方案 Tomcat本身的优化 Java虚拟机调优 Tomcat 优化分为系统优化 接下来一个个介绍 一 Tomcat本身的优化 Tomcat 的自身
  • js获取当前页面url网址信息

    1 window location href 设置或获取整个 URL 为字符串 var test window location href alert test 返回 http i cnblogs com EditPosts aspx op
  • -bash: mysqldump: command not found

    根目录在 usr local mysql bin mysqldump所以得在此目录下执行 要不就是创建软连接 这个目录是我自己tar安装的时候配置的目录 如果安装的是其他目录换成自己的目录就行了 不过一般都是这个目录吧 1 首先通过下面的命
  • Spring的控制反转(依赖注入),及两种注入方式

    1 提供构造函数来让spring实现构造注入 public class PersonService private String name 提供bean的构造函数 让spring用构造注入的方式来构造cibean public Person
  • nodejs 通过nginx后出现响应慢的解决方法

    最近用了nodejs搭建服务器 然后用了nginx做了反向代理 项目开发需求 没办法 但是发现了经过代理之后发现网页请求变慢了 而且是不能忍的一分钟以上 一开始 怀疑是在nodejs那边的问题 结果在nodejs那边进行了判断 通过写测试代
  • python : is 和==的区别

    Python中的对象包含三要素 id type value 1 id用来唯一标识一个对象 is判断的是a对象是否就是b对象 是通过id来判断的 2 type标识对象的类型 3 value是对象的值 判断的是a对象的值是否和b对象的值相等 是
  • Android音频系统之AudioFlinger(一)

    1 1 AudioFlinger 在上面的框架图中 我们可以看到AudioFlinger 下面简称AF 是整个音频系统的核心与难点 作为Android系统中的音频中枢 它同时也是一个系统服务 启到承上 为上层提供访问接口 启下 通过HAL来
  • 数据模型建模详解

    问题导读 1 数据层次如何划分 2 如何进行数据划分及命名空间约定 3 ODS层分为几部分 数据层次的划分 ODS Operational Data Store 操作数据层 在结构上其与源系统的增量或者全量数据基本保持 一致 它相当于一个数
  • 基于MATLAB的模糊pi控制器的设计

    基于MATLAB的模糊pi控制器的设计 模糊规则隶属函数的建立 a newfis fuzzypid 添加第一个输入变量e a addvar a input e 1 1 a addmf a input 1 N zmf 1 1 3 a addm
  • 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)

    预备 继上篇 浏览器缓存查看器QCacheViewer 之后 本篇开始QCookieViewer的编写 Cookie技术作为网站收集用户隐私信息 分析用户偏好的一种手段 广泛应用于各大网站 对于网站的精准营销 使用反馈 数据挖掘等具有不可估
  • 华为OD题目:统一限载货物数最小值

    华为OD机试 统一限载货物数最小值 题目描述 火车站附近的货物中转站负责将到站货物运往仓库 小明在中转站负责调度2K辆中转车K辆干货中转车 K辆湿货中转车 货物由不同供货商从各地发来 各地的货物是依次进站 然后小明按照卸货顺序依次装货到中转