华为OD机试真题——通信系统策略调度(用户调度问题)(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

news2025/5/18 23:57:29

在这里插入图片描述

2025 B卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《通信系统策略调度(用户调度问题)》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO

更多内容


题目名称:通信系统策略调度(用户调度问题)


知识点:动态规划、贪心算法
时间限制:1秒
空间限制:256MB
限定语言:不限


题目描述

在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和性能。假设当前有n个待串行调度的用户,每个用户可以使用ABC三种不同的调度策略,不同策略消耗的系统资源不同。请根据如下规则调度用户,并返回总消耗资源数:

规则:
  1. 相邻用户策略不同:若第i个用户使用策略A,则第i+1个用户只能选择BC,其他策略同理。
  2. 资源消耗抽象为数值:每个用户的三种策略对应三个消耗值(如resAresBresC)。
  3. 局部最优选择:每个用户必须选择当前可用的、消耗最少的策略(若多个策略消耗相同,选最后一个)。
输入描述:
  • 第一行为用户数n1 ≤ n ≤ 1e5)。
  • 接下来n行,每行三个整数表示用户使用ABC策略的资源消耗(值范围1 ≤ res ≤ 1e5)。
输出描述:
  • 最优策略组合下的总系统资源消耗值。
示例:

输入

3  
15 8 17  
12 20 9  
11 7 5  

输出

24  

说明

  • 用户1选B(消耗8),用户2选C(消耗9),用户3选B(消耗7),总消耗8+9+7=24

Java

问题分析

题目要求将n个用户串行调度,每个用户可选的策略为A、B、C,但相邻用户策略不同。每个策略对应资源消耗,用户必须选择当前可用的最小消耗策略(若相同则选最后一个)。求总消耗最小值。


解题思路

  1. 贪心选择:每个用户根据前一个用户的策略,选择当前可用的最小消耗策略(若相同则选最后一个)。
  2. 遍历策略:维护前一个用户的策略,排除当前不可选策略,遍历剩余策略找到最小值。
  3. 累加总消耗:每一步选择策略后累加消耗,更新前一个策略。

代码实现

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 用户数
        
        int[][] res = new int[n][3]; // 每个用户的三种策略消耗
        for (int i = 0; i < n; i++) {
   
            res[i][0] = scanner.nextInt(); // A策略消耗
            res[i][1] = scanner.nextInt(); // B策略消耗
            res[i][2] = scanner.nextInt(); // C策略消耗
        }
        
        int total = 0; // 总消耗
        int pre = -1; // 前一个用户的策略(初始为-1,表示无前驱)
        
        for (int i = 0; i < n; i++) {
   
            int minRes = Integer.MAX_VALUE;
            int selectedIndex = -1;
            
            // 遍历三种策略,选择当前可用的最小消耗
            for (int j = 0; j < 3; j++) {
   
                if (j == pre) continue; // 跳过前一个用户的策略
                
                // 找到更小或相同的消耗且索引更大(相同消耗选最后一个)
                if (res[i][j] < minRes) {
   
                    minRes = res[i][j];
                    selectedIndex = j;
                } else if (res[i][j] == minRes && j > selectedIndex) {
   
                    selectedIndex = j;
                }
            }
            
            total += minRes; // 累加当前消耗
            pre = selectedIndex; // 更新前一个策略
        }
        
        System.out.println(total);
    }
}

代码解析

  1. 输入处理

    int n = scanner.nextInt();
    int[][] res = new int[n][3];
    

    读取用户数和每个用户的三种策略消耗值,存入二维数组res

  2. 初始化变量

    int total = 0; // 总消耗
    int pre = -1; // 前一个用户的策略(初始为-1)
    

    total记录总消耗,pre记录前一个用户的策略索引。

  3. 遍历每个用户

    for (int i = 0; i < n; i++) {
         
    

    逐个处理每个用户的策略选择。

  4. 选择策略逻辑

    for (int j = 0; j < 3; j++) {
         
        if (j == pre) continue; // 跳过不可选策略
        if (res[i][j] < minRes) {
         
            minRes = res[i][j];
            selectedIndex = j;
        } else if (res[i][j] == minRes && j > selectedIndex) {
         
            selectedIndex = j;
        }
    }
    

    遍历三种策略,排除前一个用户的策略,找到最小消耗且索引最大的策略。

  5. 更新总消耗和前驱策略

    total += minRes;
    pre = selectedIndex;
    

    累加当前用户的消耗,并更新pre为当前选择的策略索引。


示例测试

  1. 示例输入1
    输入:

    3  
    15 8 17  
    12 20 9  
    11 7 5  
    

    输出:
    24
    解释:用户1选B(8),用户2选C(9),用户3选B(7),总消耗24。

  2. 示例输入2
    输入:

    2  
    5 3 3  
    4 5 6  
    

    输出:
    7
    解释:用户1选C(3),用户2选A(4),总消耗7。

  3. 示例输入3
    输入:

    4  
    1 2 3  
    4 5 6  
    7 8 9  
    10 11 12  
    

    输出:
    18
    解释:用户1选A(1),用户2选B(5),用户3选A(7),用户4选B(11),总消耗24。


综合分析

  1. 时间复杂度

    • 每个用户遍历3种策略,总时间复杂度为O(3n),即O(n),适用于n ≤ 1e5
  2. 空间复杂度

    • 存储用户策略消耗的二维数组res占用O(3n)空间,其他变量为O(1),总空间复杂度O(n)
  3. 正确性

    • 通过贪心策略确保每一步选择当前可用的最小消耗,严格满足题目规则。
  4. 优势

    • 高效性:线性时间复杂度处理大规模输入。
    • 简洁性:逻辑清晰,代码简洁,无需复杂数据结构。
  5. 适用性

    • 完全支持题目约束条件,适用于资源调度类问题,满足实时计算需求。</

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

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

相关文章

llamafactory SFT 从断点恢复训练

背景 我使用llamafactory sft 微调模型的时候。gpu停止运行了。日志文件没有任何的报错信息。 显存还是占用状态。 查看llamafactory的进程是下述信息&#xff1a; 151312 151306 91 17:42 ? 03:58:10 [llamafactory-cl] 既然如此&#xff0c;那就只能从断点恢复训练了。 …

计算机网络-----6分层结构

目录 “分层” 的设计思想&#xff1a; 计算机网络要完成的功能&#xff1a; 计算机网络的分层结构&#xff1a; 网络体系结构的概念&#xff1a; 各层之间的关系&#xff1a; 数据的传输过程 水平视角&#xff1a; 垂直视角&#xff1a; 相关概念 协议三要素&#x…

运算放大器相关的电路

1运算放大器介绍 解释&#xff1a;运算放大器本质就是一个放大倍数很大的元件&#xff0c;就如上图公式所示 Vp和Vn相差很小但是放大后输出还是会很大。 运算放大器不止上面的三个引脚&#xff0c;他需要独立供电&#xff1b; 如图比较器&#xff1a; 解释&#xff1a;Vp&…

python版本管理工具-pyenv轻松切换多个Python版本

在使用python环境开发时&#xff0c;相信肯定被使用版本所烦恼&#xff0c;在用第三方库时依赖兼容的python版本不一样&#xff0c;有没有一个能同时安装多个python并能自由切换的工具呢&#xff0c;那就是pyenv&#xff0c;让你可以轻松切换多个Python 版本。 pyenv是什么 p…

elementUI 循环出来的表单,怎么做表单校验?

数据结构如下&#xff1a; diversionParamList: [ { length: null, positionNumber: null, value: null, } ] 思路&#xff1a;可根据 index 动态绑定 :props 属性值&#xff0c;校验规则写在:rules <div class"config-item" v-for"(item, index) in form.…

Leetcode76覆盖最小子串

覆盖最小子串 代码来自b站左程云 class Solution {public String minWindow(String str, String tar) {char[] s str.toCharArray();char[] t tar.toCharArray();int[] cnt new int[256];for (char cha : t) { cnt[cha]--;}int len Integer.MAX_VALUE;int debt t.length…

电力杆塔安全监测解决方案

一、方案背景 在台风、滑坡等自然灾害出现时&#xff0c;极易产生倒杆、断杆、杆塔倾斜、塔基滑动等致使杆塔失稳的状况&#xff0c;进而引发导线断线、线路跳闸等事故&#xff0c;给电网的安全稳定运行造成影响。可借助在铁塔上装设的传感器&#xff0c;能够感知铁塔的工作状态…

AD 常用系统快捷键

(1) L: 打开层设置开关选项(在元件移动状态下&#xff0c;按下“L”键换层) (2) S: 打开选择&#xff0c;如SL(线选)、SI(框选)、SE(滑动选择) (3) J: 跳转&#xff0c;如JC(跳转到元件)、JN(跳转到网络) (4) CtrlQ: 英寸和毫米相互切换。 (5) Delete: 删除已被选择的对象 E…

今日行情明日机会——20250516

上证缩量收阴线&#xff0c;小盘股表现相对更好&#xff0c;上涨的个股大于下跌的&#xff0c;日线已到前期压力位附近&#xff0c;注意风险。 深证缩量收假阳线&#xff0c;临近日线周期上涨末端&#xff0c;注意风险。 2025年5月16日涨停股行业方向分析 机器人概念&#x…

AlphaEvolve:LLM驱动的算法进化革命与科学发现新范式

AlphaEvolve&#xff1a;LLM驱动的算法进化革命与科学发现新范式 本文聚焦Google DeepMind最新发布的AlphaEvolve&#xff0c;探讨其如何通过LLM与进化算法的结合&#xff0c;在数学难题突破、计算基础设施优化等领域实现革命性进展。从48次乘法优化44矩阵相乘到数据中心资源利…

多尺度对比度调整

一、背景介绍 受到了前面锐化算法实现的启发&#xff0c;对高频层做增强是锐化&#xff0c;那么对中低频一起做增强&#xff0c;就应该能有局域对比度增强效果。 直接暴力实现了个基本版本&#xff0c;确实有对比度增强效果。然后搜了下关键字&#xff0c;还真找到了已经有人这…

解决IDEA Maven编译时@spring.profiles.active@没有替换成具体环境变量的问题

如果不加filtering true&#xff0c;编译后的文件还是 spring.profiles.active 编译前的application.yml 编译后的application.yml【环境变量没有改变】 解决方案 找到 SpringBoot 启动类所在的pom.xml&#xff0c;在 resources 增加 filtering true&#xff0c;然后重新…

记参加一次数学建模

题目请到全国大学生数学建模竞赛下载查看。 注&#xff1a;过程更新了很多文件&#xff0c;所有这里贴上的有些内容不是最新的&#xff08;而是草稿&#xff09;。 注&#xff1a;我们队伍并没有获奖&#xff0c;文章内容仅供一乐。 从这次比赛&#xff0c;给出以下赛前建议 …

Maven使用详解:Maven的概述(二)

一、核心定义与功能 Maven是由Apache软件基金会开发的开源项目管理工具&#xff0c;专为Java项目设计&#xff0c;主要用于自动化构建、依赖管理和项目标准化。其核心功能包括&#xff1a; 依赖管理&#xff1a;通过pom.xml文件声明依赖库&#xff0c;自动从中央仓库下载并管…

新型智慧园区技术架构深度解析:数字孪生与零碳科技的融合实践

&#x1f3ed;在杭州亚运村零碳园区&#xff0c;光伏板与氢燃料大巴构成的能源网络&#xff0c;正通过数字孪生技术实现智能调度。这不仅是格力电器与龙源电力在新能源领域的创新实践&#xff0c;更是智慧园区4.0时代的标杆案例。当AI算法开始接管能源调度&#xff0c;当BIM建模…

Linux基础开发工具大全

目录 软件包管理器 1>软件包 2>软件生态 3>yum操作 a.查看软件包 b.安装软件 c.卸载软件 4>知识点 vim编辑器 1>基本概念 2>基本操作 3>正常模式命令集 a.模式切换 b.移动光标 c.删除 d.复制 e.替换 f.撤销 g.更改 4>底行模式命令…

网页工具-OTU/ASV表格物种分类汇总工具

AI辅助下开发了个工具&#xff0c;功能如下&#xff0c;分享给大家&#xff1a; 基于Shiny开发的用户友好型网页应用&#xff0c;专为微生物组数据分析设计。该工具能够自动处理OTU/ASV_taxa表格&#xff08;支持XLS/XLSX/TSV/CSV格式&#xff09;&#xff0c;通过调用QIIME1&a…

2025第三届盘古初赛(计算机部分)

前言 比赛的时候时间不对&#xff0c;打一会干一会&#xff0c;导致比赛时候思路都跟不上&#xff0c;赛后简单复现一下&#xff0c;希望大家批批一下 计算机取证 1、分析贾韦码计算机检材&#xff0c;计算机系统Build版本为&#xff1f;【标准格式&#xff1a;19000】 183…

【源码级开发】Qwen3接入MCP,企业级智能体开发实战!

Qwen3接入MCP智能体开发实战&#xff08;上&#xff09; 一、MCP技术与Qwen3原生MCP能力介绍 1.智能体开发核心技术—MCP 1.1 Function calling技术回顾 如何快速开发一款智能体应用&#xff0c;最关键的技术难点就在于如何让大模型高效稳定的接入一些外部工具。而在MCP技术…

基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案‌

&#xff08;国产化替代J1900的应急救援智能化解决方案&#xff09; 一、硬件架构设计‌ ‌极端环境防护系统‌ ‌防爆耐高温设计‌&#xff1a; 采用陶瓷纤维复合装甲&#xff08;耐温1200℃持续1小时&#xff09;&#xff0c;通过GB 26784-2023消防设备防爆认证IP68防护等级…