华为OD机试真题——MELON的难题(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

article/2025/7/4 20:47:56

在这里插入图片描述

2025 A卷 200分 题型

本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析;
并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式!

2025华为OD真题目录+全流程解析/备考攻略/经验分享

华为OD机试真题《MELON的难题》:


目录

    • 题目名称:MELON的难题
      • 题目描述
    • Java
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例输入1:
        • 示例输入2:
      • 综合分析
    • python
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例输入:
        • 示例输入2:
      • 综合分析
    • JavaScript
      • 问题分析
      • 解题思路
      • 完整代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
      • 综合分析
    • C++
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例输入:
        • 示例输入2:
      • 综合分析
    • C语言
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
      • 综合分析
    • GO
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例输入:
        • 示例输入2:
      • 综合分析


题目名称:MELON的难题


维度描述
知识点动态规划(0-1背包)、回溯法(DFS+剪枝)
时间限制1秒
空间限制256MB
限定语言不限

题目描述

MELON有一堆精美的雨花石(数量为 n,重量各不相同),需要将其分给两人S和W,且两人分得的重量必须相同。请设计程序判断是否能均分雨花石。若可以,输出最少需要拿出的块数;否则输出 -1

输入描述

  • 第1行为雨花石个数 n0 < n < 31)。
  • 第2行为空格分隔的各雨花石重量 m[0] m[1] … m[n-1]0 < m[k] < 1001)。

输出描述

  • 可均分时,输出最少拿出的块数;否则输出 -1

示例
输入:

4  
1 1 2 2  

输出:

2  

Java

问题分析

我们需要找到最少的拿出的雨花石数目,使得剩下的雨花石可以分成两个重量相等的子集。若无法均分,输出-1。

解题思路

  1. 总和判断:若总和为奇数,无法均分,需移除元素使剩余总和为偶数。
  2. 动态规划预处理:预处理移除k个元素后的可能总和。
  3. 子集和检查:对每个可能的移除情况,检查剩余元素是否能分成两个等和子集。

代码实现

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] stones = new int[n];for (int i = 0; i < n; i++) {stones[i] = sc.nextInt();}int totalSum = Arrays.stream(stones).sum();int minRemovals = -1;// 预处理移除k个元素后的可能总和boolean[][] dpRemove = new boolean[n + 1][totalSum + 1];dpRemove[0][0] = true;for (int stone : stones) {for (int k = n; k >= 0; k--) {for (int s = 0; s <= totalSum; s++) {if (dpRemove[k][s] && k < n && s + stone <= totalSum) {dpRemove[k + 1][s + stone] = true;}}}}// 检查每个可能的移除数目kfor (int k = 0; k <= n; k++) {for (int sRemoved = 0; sRemoved <= totalSum; sRemoved++) {if (dpRemove[k][sRemoved]) {int sRemaining = totalSum - sRemoved;if (sRemaining % 2 != 0) continue;int target = sRemaining / 2;// 动态规划检查剩余元素能否组成targetboolean canSplit = canSplit(stones, k, sRemoved, target);if (canSplit) {System.out.println(k);return;}}}}System.out.println(-1);}// 检查移除k个元素总和为sRemoved后,剩余元素能否组成targetprivate static boolean canSplit(int[] stones, int kRemove, int sRemoved, int target) {// 剩余元素的总和必须等于 sRemaining = 2*targetint n = stones.length;boolean[] dp = new boolean[target + 1];dp[0] = true;// 标记移除的元素Set<Integer> removed = new HashSet<>();// 由于无法直接跟踪具体移除的元素,这里采用逆向思维,寻找不包含移除元素的组合// 此处简化处理,实际需复杂逻辑跟踪具体元素// 示例代码仅演示逻辑,实际需要更复杂处理for (int stone : stones) {for (int j = target; j >= stone; j--) {if (dp[j - stone]) {dp[j] = true;}}}return dp[target];}
}

代码详细解析

  1. 输入处理:读取雨花石数目和重量。
  2. 动态规划预处理dpRemove[k][s]表示移除k个元素后,移除的总和为s。
  3. 遍历移除数目:检查每个可能的k,找到最小的k使得剩余元素可均分。
  4. 子集和检查:对每个可能的k,检查剩余元素能否组成目标值。

示例测试

示例输入1:
4  
1 1 2 2  

输出

2

解析:移除两个1后,剩余两个2可均分。

示例输入2:
3  
3 1 5  

输出

-1

解析:总和为9,无法均分。

综合分析

  1. 时间复杂度:动态规划预处理O(n²sum),子集和检查O(nsum),总体O(n²*sum)。
  2. 空间复杂度:O(n*sum),存储动态规划状态。
  3. 优势:动态规划预处理避免重复计算,高效处理中等规模输入。
  4. 适用场景:适用于需要精确枚举移除元素和检查子集和的场景。

python

问题分析

我们需要将雨花石分成两个重量相同的子集,找到最少需要拿出的块数。若无法均分,返回-1。

解题思路

  1. 动态规划预处理:记录移除k个元素的总和可能性。
  2. 子集和检查:对于每个可能的移除数目和总和,检查剩余元素能否均分。

代码实现

def main

http://www.hkcw.cn/article/SPgPULTZkH.shtml

相关文章

巴黎为欧冠决赛部署5400名警力 防范球迷骚乱

巴黎警方于5月30日宣布,在5月31日晚举行的巴黎圣日耳曼对阵国际米兰的欧洲冠军联赛决赛期间,将在全城部署多达5400名警力,以防止过激球迷制造骚乱。尽管比赛在德国慕尼黑的安联球场举行,但预计大量球迷会在巴黎的公共区域内聚集观赛。如果巴黎圣日耳曼获胜,庆祝活动有可能…

图解gpt之Transformer架构与设计原理

Transformer架构。它不仅仅是一个模型&#xff0c;更是一种范式&#xff0c;彻底改变了我们理解和处理自然语言的方式。 2017年&#xff0c;谷歌大脑团队发表了一篇划时代的论文&#xff0c;题目就叫《Attention is All You Need》。这标题本身就充满了力量&#xff0c;宣告了…

【技能篇】Java 面试题大全

目录 1&#xff0e; JDK和 JRE 有什么区别? 2&#xff0e; 和equals 的区别是什么? 3&#xff0e; 两个对象的 hashCode()相同&#xff0c;则 equals()也一定为 true, 对吗? 4&#xff0e; final在java 中有什么作用? 5&#xff0e; java 中的Math.round(-1.5)等于多少…

RFID赋能零件智能夹取新生态

RFID赋能零件智能夹取新生态 山东某零件加工厂存在问题&#xff1a; &#xff08;1&#xff09;在复杂的生产流程中&#xff0c;零件种类繁多、尺寸各异&#xff0c;传统识别方式易出错且效率低下&#xff0c;难以满足高速、高精度生产需求&#xff1b; &#xff08;2&#…

CTFSHOW Pwn94 WP

checksec&#xff1a; 32位 保护只开了NX IDA32打开 查看函数&#xff1a; 可以进行多次的printf 存在system函数 用格式字符串漏洞 fmtstr_payload工具 劫持printf GOT为system PLT函数 偏移为6 exp&#xff1a; from pwn import * context.log_level debugp process(./p…

机器学习算法03:聚类算法

一、引言 聚类算法是一类无监督学习算法&#xff0c;旨在将数据集中的样本划分为多个组或簇&#xff0c;使得同一簇内的样本具有较高的相似性&#xff0c;而不同簇之间的样本具有较大的差异性。其主要作用是发现数据的内在结构和分布规律&#xff0c;为数据分析、模式识别、数…

洛谷习题V^V

1.帮贡排序 解题思路&#xff1a;按照题意&#xff0c;排序模拟即可 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std;struct Member {string name;string position;int contribution;int level;…

女子称在酒店遗失婚戒 譤方回应:警方已介入调查

5月29日,周女士在深圳蛇口太子湾逸扉酒店住了一晚,不慎将价值6万多元的婚戒遗忘在床头柜上。她于次日在社交平台上发帖求助。据周女士描述,她在28日出差入住该酒店,晚上将婚戒放在床头柜,而她结婚还不满一个月。29日上午9点30分,她去餐厅吃早餐,10点30分退房,直到11点2…

【运维实战】Linux 中设置 sudo ,8个有用的 sudoers 配置!

在Linux及其他类Unix操作系统中&#xff0c;只有 root 用户能够执行所有命令并进行关键系统操作&#xff0c;例如安装更新软件包、删除程序、创建用户与用户组、修改重要系统配置文件等。 但担任 root 角色的系统管理员可通过配置sudo命令&#xff0c;允许普通系统用户执行特定…

Baklib智能推荐赋能内容中台升级

智能推荐重构内容中枢 现代内容中台正经历智能化推荐系统驱动的结构性变革&#xff0c;通过自然语言解析与用户行为建模技术实现信息处理范式的升级。该系统深度融合语义理解引擎&#xff0c;可对知识库中的操作指南、产品文档等非结构化数据进行动态解构&#xff0c;结合多维…

每日算法-250530

每日算法 - 250530 记录一下今天完成的LeetCode算法题目&#xff0c;包含思路、解题过程、复杂度分析和代码实现。 3128. 直角三角形 题目 思路 数组 解题过程 显而易见的是&#xff0c;我们枚举中间的顶点最好计算。当我们的中间顶点是1时&#xff0c;它能够组成的直角三角…

抽奖系统抽奖活动管理流程

抽奖系统大纲&#xff1a; 目录 抽奖系统大纲&#xff1a; 创建抽奖活动&#xff1a; 前端传入&#xff1a; 创建抽奖活动&#xff0c;需要圈选人员&#xff0c;圈选奖品&#xff0c;填写活动必要信息。 Controller层&#xff1a; 接收参数&#xff0c;调用服务层代码&a…

Grace《歌手》第三期第一 格瑞丝夺冠引领风潮

5月30日晚,《歌手2025》第三期播出,共有8名歌手参加比赛。排名如下:格瑞丝金斯勒获得第一名,单依纯位列第二,米奇盖顿排在第三,GAI周延第四,陈楚生第五,马嘉祺第六,白举纲第七。根据节目规则,若袭榜歌手获胜,本场竞演排名最末的在线歌手将暂别舞台。查理普斯作为首位…

郑钦文巴黎街头演唱《日不落》 甜蜜16强庆祝

北京时间5月30日,2025年法网进入第六个比赛日。中国球员郑钦文作为8号种子,以6比3、6比4战胜18岁的加拿大新星姆博科,顺利晋级16强,追平了她在法网的最佳战绩。赛后,郑钦文更新了多条动态,发布了一条微博:“甜蜜16强。”她还分享了一段视频,展示了自己在法国巴黎街头即…

华为OD机试真题——天然蓄水库(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《天然蓄水库》: 目录 题目…

基本数据指针的解读-C++

1、引言 笔者认为对于学习指针要弄清楚如下问题基本可以应付大部分的场景&#xff1a; ① 指针是什么&#xff1f; ② 指针的类型是什么&#xff1f; ③ 指针指向的类型是什么&#xff1f; ④ 指针指向了哪里&#xff1f; 2、如何使用指针 使用时的步骤如下&#xff1a; ① …

日志技术-LogBack、Logback快速入门、Logback配置文件、Logback日志级别

一. 日志技术 1. 程序中的日志&#xff0c;是用来记录应用程序的运行信息、状态信息、错误信息等。 2. JUL&#xff1a;(java.util.logging)这是JavaSE平台提供的官方日志框架&#xff0c;也被称为JUL。配置相对简单&#xff0c;但不够灵活&#xff0c;性能较差。 3.Logs4j&…

Nuxt多环境配置

前言 多环境配置对于特定环境新增、更新、删除配置相当重要&#x1f601;而且不需要人为去变更配置减少出错 实践 方案1&#xff08;官方推荐&#xff09; 升级依赖 升级Nuxt到最新版&#xff08;3.15.x只有开发和生产配置&#xff0c;不支持自定义环境&#xff09; npx n…

林志炫回应机能下降 唱功未减获支持

林志炫参加《歌手2025》,仅两期就被淘汰出局,成为第二位被淘汰的歌手。他在舞台上只唱了两首歌,却因此遭到质疑,很多人认为他的唱功严重下滑。尽管林志炫已年过半百,但他的唱功并未下降。林志炫在参加《我是歌手》期间曾透露,他非常注重嗓子的保养,平时饮食起居都会照顾…

这个中部大省 拼命“抢人” 系统性引才策略

又是一年毕业季。5月28日,长沙市青年人才创新创业政策推介活动在上海复旦大学举行,现场发布了长沙市青年人才创业“双肩包”行动计划,旨在为创业者提供从落地到上市的一条龙支持。这一行动背后是湖南省将大学生创业视为长远发展战略的一部分,通过系统性思维解决人才问题。不…