当前位置: 首页 > news >正文

华为OD机试-MELON的难题-DFS(JAVA 2025A卷)

在这里插入图片描述

题意是从N快雨花石中找出最少拿出雨花石的块数,使得雨花石可以均分,直接使用dfs解决此类组合问题

package com.example.demo.bean;import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;public class YuHuaStone {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = Integer.parseInt(sc.nextLine());int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();}System.out.println(yuHuaStone(nums));}private static int res = Integer.MAX_VALUE;private static int yuHuaStone(int[] nums) {int sum = Arrays.stream(nums).sum();if (sum % 2 != 0) return -1;int[] used = new int[nums.length];LinkedList<Integer> path = new LinkedList<>();Arrays.sort(nums);dfs(nums, nums.length - 1, path, used, sum / 2);return res == Integer.MAX_VALUE ? -1 : res;}private static void dfs(int[] nums, int start, LinkedList<Integer> path, int[] used, int target) {if (target == 0) {res = Math.min(res, path.size());return;}for (int i = start; i >= 0; i--) {// 雨花石累加和>target,或者累加的雨花石数目>已算出的最小雨花石数目,剪枝if (target <= 0 || path.size() >= res) break;// 同一层内,重复重量的雨花石直接剪枝if (i < nums.length - 1 && nums[i + 1] == nums[i] && used[i + 1] == 0) continue;path.addLast(nums[i]);used[i] = 1;dfs(nums, i - 1, path, used, target - nums[i]);path.removeLast();used[i] = 0;}}
}
http://www.dtcms.com/a/254735.html

相关文章:

  • IntersectionObserver API应用场景示例代码详解
  • Netty PoolChunk依赖的自定义数据结构:IntPriorityQueue和LongLongHashMap
  • 计算机网络:(五)信道复用技术,数字传输系统,宽带接入技术
  • C++中所有数据类型
  • CppCon 2017 学习:folly::Function A Non-copyable Alternative to std::function
  • 目标检测之YOLOV11自定义数据使用OBB训练与验证
  • Apache ECharts-01.介绍
  • Arduino Nano 33 BLE Sense Rev 2开发板使用指南之【外设开发】
  • 响应式数据框架性能深度分析报告(@type-dom/signals)
  • EchoEar(喵伴):乐鑫发布与火山引擎扣子联名 AI 智能体开发板
  • 20250619在Ubuntu20.04.6下编译Rockchip瑞芯微原厂的RK3576的Buildroot系统
  • SSH服务与rsync服务配置实战
  • 内网运行控制四百来个海康威视硬件物联网定员管控软件(华为平板电脑版)
  • 3.5 map_saver地图的保存与加载
  • STM32 定时器讲解
  • 【Bug:docker】--Docker同时部署Dify和RAGFlow出现错误
  • 《汇编语言:基于X86处理器》第2章 复习题
  • 【AI论文】SWE-Factory:您的自动化工厂,提供问题解决培训数据和评估基准
  • Java 正则表达式高级用法
  • 全局数据的处理
  • 设计模式 - 原型模式
  • LTC3130EMSE#TRPBF ADI电子元器件深度解析 物联网/工业传感器首选!
  • RK3568笔记八十五:LVGL播放AVI视频
  • 单服务器部署多个Discuz! X3.5站点并独立Redis配置方案
  • 蜻蜓Q系统的技术演进:从Laravel 6到Laravel 8的升级之路-优雅草卓伊凡
  • NAT基础配置实验
  • Java求职者面试指南:Spring, Spring Boot, Spring MVC, MyBatis技术点深度解析
  • FPGA基础 -- Verilog 概率分布函数
  • 图床项目--展示
  • Linux简单了解以及VM虚拟机的安装使用(后端程序员)