华为OD机试 - MELON的难题 - 动态规划(Java 2023 B卷 100分)

news2025/1/19 20:14:34

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、动态规划
    • 五、解题思路
    • 六、Java算法源码
    • 七、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

一、题目描述

MELON有一堆精美的雨花石(数量为n,重量各异),准备送给S和W。MELON希望送给俩人的雨花石重量一致,请你设计一个程序,帮MELON确认是否能将雨花石平均分配。

二、输入描述

第1行输入为雨花石个数: n,0<n<31。
第2行输入为空格分割的各雨化石重量: m[0] m[1] … m[n- 1], 0< m[k] < 1001
不需要考虑异常输入的情况。

三、输出描述

如果可以均分,从当前雨花石中最少拿出几块,可以使两堆的重量相等;如果不能均分,则输出-1。

四、动态规划

看到题目,我的第一反应是采用动态规划求解,目标值是雨花石重量总和的一半,从当前雨花石中最少拿出几块,满足两人的雨花石均分。

先区分一下动态规划与分治方法,都是将原问题拆分成若干个子问题,分别求解,再组合子问题的结果选出最优解。

分治方法将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。

动态规划应用与子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子子问题),在这种情况下,分治方法会做许多不必要的工作,他会反复求解那些公共子子问题。

而动态规划对于每一个子子问题只求解一次,将其解保存在一个表格里面,从而无需每次求解一个子子问题时都重新计算,避免了不必要的计算工作。

五、解题思路

  1. 输入有几块雨花石;
  2. 输入每块雨花石的重量;
  3. 通过Java8新特性 Stream表达式获取每块雨花石的重量;
  4. 获取雨花石的总重量;
  5. 因为要两个人平分,不能平分的话,直接返回-1;
  6. 计算雨花石的一半重量,也就是两个人得到的重量,计算动态规划目标值;
  7. 定义二维数组dp,采用动态规划算法,求出最优解;

六、Java算法源码

package com.guor.od;

import java.util.Scanner;
import java.util.*;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 输入有几块雨花石
        int n = Integer.parseInt(sc.nextLine());
        // 输入每块雨花石的重量
        int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        // 获取雨花石的总重量
        int sum = Arrays.stream(nums).sum();

        // 因为要两个人平分,不能平分的话,直接返回-1
        if (sum % 2 != 0) {
            System.out.println(-1);
            return;
        }

        // 雨花石的一半重量,也就是两个人得到的重量,计算目标
        int avg = sum / 2;
        // 采用动态规划算法
        int[][] dp = new int[n + 1][avg + 1];

        for (int i = 0; i <= avg; i++) {
            dp[0][i] = n;
        }

        for (int i = 1; i <= n; i++) {
            int num = nums[i - 1];
            for (int j = 1; j <= avg; j++) {
                if (j < num) {
                    dp[i][j] = dp[i - 1][j];
                } else {
                    dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j - num] + 1);
                }
            }
        }

        if (dp[n][avg] == n) {
            System.out.println(-1);
        } else {
            // 输出最优解
            System.out.println(dp[n][avg]);
        }
    }
}

七、效果展示

1、输入

4
1 2 3 4

2、输出

2

3、说明

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

为什么很多干了四五年的老IT告诉你算法没用?

文章目录 前言认知决定上限为什么学算法&#xff1f;为什么很多干了四五年的老IT告诉你算法没用&#xff1f;怎么学算法&#xff1f;算法集训 前言 英雄算法联盟八月集训 已经接近尾声&#xff0c;九月算法集训将于 09月01日 正式开始&#xff0c;目前已经提前开启报名&#xf…

学乐多光屏P90:引领儿童智慧教育新时代

随着科技的迅猛发展&#xff0c;儿童教育正经历着深刻变革。在这个引领变革的浪潮中&#xff0c;学乐多光屏P90以其卓越的特性和教育价值&#xff0c;成为了儿童智慧教育的引领者&#xff0c;为孩子们打开了通向知识世界的大门。 学乐多光屏P90的独特之处在于其融合了触摸和投影…

图像生成模型

监督学习 与 无监督学习 监督学习 数据&#xff1a;&#xff08;x, y&#xff09; X是数据&#xff0c;Y是标签 目标&#xff1a;学习一个从x到y的函数映射 样例&#xff1a;分类、回归、物体检测、语义分割、描述 无监督学习 数据&#xff1a;&#xff08;x&#xff09; 只有…

DPI 设置和获取

DPI设置与获取之前请保证程序已经打开DPI感知或者在清单文件嵌入DPI感知&#xff0c;否则API可能获取的值不准确 方法一:GetScaleFactorForMonitor 通过枚举显示器获取不同设备的DPI&#xff0c;获取的是实际DPI static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC…

11.2.1-通货膨胀CPI

文章目录 1. 什么是CPI2. 在哪里获取CPI数据3. CPI的同比、环比到底是什么意思&#xff1f;4. 计算购买力侵蚀5. 复利计算 微不足道的小事也会引发惊人的结果&#xff0c; 每念及此&#xff0c; 我就认为世上无小事。——布鲁斯巴登&#xff08;Bruce Barton&#xff09; 核心内…

2023年9月DAMA-CDGA/CDGP数据治理认证考试,火热报名

据DAMA中国官方网站消息&#xff0c;2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启&#xff0c;相关事宜通知如下&#xff1a; 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA) 数据治理专家(CertifiedDataGovernanc…

[NSSCTF 2nd] NSS两周年纪念赛。

都说开卷有益&#xff0c;其实作题也有益&#xff0c;每打一次总能学到点东西。 PWN NewBottleOldWine 这个没作出来&#xff0c;一时还不明白RISC-V64怎么弄本地环境&#xff0c;不过看了WP感觉很简单&#xff0c;取flag用不着环境。 IDA不给翻译了&#xff0c;一点点看汇…

资源分享| 4种聚类算法及可视化(Python)

在这篇文章中&#xff0c;基于20家公司的股票价格时间序列数据。根据股票价格之间的相关性&#xff0c;看一下对这些公司进行聚类的四种不同方式。 苹果&#xff08;AAPL&#xff09;&#xff0c;亚马逊&#xff08;AMZN&#xff09;&#xff0c;Facebook&#xff08;META&…

035 - datetime和timedstamp

该DATETIME类型用于包含日期和时间部分的值。MySQL检索并DATETIME以格式显示 值 。支持的范围是 到。 YYYY-MM-DD hh:mm:ss1000-01-01 00:00:009999-12-31 23:59:59 该TIMESTAMP数据类型被用于同时包含日期和时间部分的值。 UTCTIMESTAMP的范围是UTC。 1970-01-01 00:00:01203…

gitlab提交项目Log in with Access Token错误

目录 报错信息 问题描述 解决方案 报错信息 问题描述 在提交项目到gitlab时&#xff0c;需要添加账户信息 &#xff0c;但是报了这样一个错&#xff0c;原因应该就是路径问题&#xff0c;我在填写server地址的时候&#xff0c;就出现了路径问题&#xff0c;我把多余的几个/…

为啥这么多公司用 ZooKeeper?它到底解决了什么问题?

ZooKeeper 介绍 ZooKeeper 很流行&#xff0c;有个基本的疑问&#xff1a; ZooKeeper 是用来做什么的&#xff1f; 之前没有ZK&#xff0c;为什么会诞生 ZK&#xff1f; OK&#xff0c;解答一下上面的疑问&#xff1a;&#xff08;下面是凭直觉说的&#xff09; ZooKeeper …

前端项目部署,阿里云服务器部署前端项目,超详细

需求背景&#xff1a;作为一个前端&#xff0c;特别身处于中小公司时&#xff0c;对于部署也需要有所了解。本次就介绍前端基础的项目部署。本次使用的是阿里云服务器进行的部署 部署核心步骤 1.准备打包好的前端代码&#xff08;dist包&#xff09;或者是一个html文件 2.购买…

Day49|动态规划part10:188.买卖股票的最佳时机IV、121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

188. 买卖股票的最佳时机IV leetcode链接&#xff1a;188 题「买卖股票的最佳时机 IVopen in new window」 视频链接&#xff1a;动态规划来决定最佳时机&#xff0c;至多可以买卖K次&#xff01;| LeetCode&#xff1a;188.买卖股票最佳时机4 给你一个整数数组 prices 和一…

【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(2,常见随机变量及其分布 | 随机变量函数的分布)

文章目录 引言三、常见的随机变量及其分布3.1 常见的离散型随机变量及其分布律&#xff08;一&#xff09;&#xff08;0-1&#xff09;分布&#xff08;二&#xff09;二项分布&#xff08;三&#xff09;泊松分布&#xff08;四&#xff09;几何分布&#xff08;五&#xff0…

利用R作圆环条形图

从理念上看&#xff0c;本质就是增加了圆环弧度的条形图。如上图2。 需要以下步骤&#xff1a; 数据处理&#xff0c;将EXCEL中的数据做成3*N的表格导入系统&#xff0c;代码如下&#xff1a;library(tidyverse) library(stringr)library(ggplot2)library(viridis) stuper &…

电脑连不上网?学会这5个方法,不用愁!

“怎么回事呢&#xff1f;我的电脑一直连不上网。尝试了好多个方法都还是不行。大家遇到这种情况的时候都是怎么处理的呀&#xff1f;” 在现代生活中&#xff0c;电脑连接到网络已经成为必不可少的一部分。如果电脑无法联网&#xff0c;可能会影响我们的工作和娱乐。那么&…

Scrum敏捷研发迭代式开发

Scrum是一个迭代式增量软件开发过程&#xff0c;是敏捷方法论中的重要框架之一。它通常用于敏捷软件开发&#xff0c;包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括Scrum主管&#xff08;Scrum Master&#xff09;、产品负责人&#xff08;Product Owner&…

【已解决】ZooKeeper配置中出现Error contacting service. It is probably not running

ZooKeeper配置中出现Error contacting service. It is probably not running 问题 安装zookeeper&#xff0c;启动报错了 Error contacting service. It is probably not running 思路 tail -100f logs/zookeeper-root-server-node1.itcast.cn.out 查看日志报错 zoo.cfg没…

LinuxShell变量

变量&#xff1a; 命名规则&#xff1a; 在Shell中&#xff0c;变量名可以由字母、数字或者下划线组成&#xff0c;并且只能以字母或者下划线开头。对于变量名的长度&#xff0c;Shell并没有做出明确的规定。因此&#xff0c;用户可以使用任意长度的字符串来作为变量名。但是…

算法:模拟思想算法

文章目录 实现原理算法思路典型例题替换所有问号提莫攻击N字型变换外观序列 总结 本篇总结的是模拟算法 实现原理 模拟算法的实现原理很简单&#xff0c;就是依据题意实现题意的目的即可&#xff0c;考察的是你能不能实现题目题意的代码能力 算法思路 没有很明显的算法思路…