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

在这里插入图片描述

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.mzph.cn/bicheng/81180.shtml

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

相关文章

Ubuntu 系统默认已安装 python,此处只需添加一个超链接即可

步骤 1&#xff1a;确认 Python 3 的安装路径 查看当前 Python 3 的路径&#xff1a; which python3 输出类似&#xff1a; /usr/bin/python3 步骤 2&#xff1a;创建符号链接 使用 ln -s 创建符号链接&#xff0c;将 python 指向 python3&#xff1a; sudo ln -s /usr/b…

深度学习-分布式训练机制

1、分布式训练时&#xff0c;包括train.py的全部的代码都会在每个gpu上运行吗&#xff1f; 在分布式训练&#xff08;如使用 PyTorch 的 DistributedDataParallel&#xff0c;DDP&#xff09;时&#xff0c;每个 GPU 上运行的进程会执行 train.py 的全部代码&#xff0c;但通过…

yarn的介绍

### Yarn 的基本概念 Yarn 是 Hadoop 生态系统中的一个重要组成部分&#xff0c;它是一种分布式资源管理框架&#xff0c;旨在为大规模数据处理提供高效的资源管理和调度能力。以下是关于 Yarn 的一些核心概念&#xff1a; #### 1. **Yarn 的定义** Yarn 是一个资源调度平台&a…

Spring-messaging-MessageHandler接口实现类ServiceActivatingHandler

ServiceActivatingHandler实现了MessageHandler接口&#xff0c;所以它是一个MessageHandler&#xff0c;在spring-integration中&#xff0c;它也叫做服务激活器&#xff08;Service Activitor&#xff09;&#xff0c;因为这个类是依赖spring容器BeanFactory的&#xff0c;所…

快速入门深度学习系列(2)----损失函数、逻辑回归、向量化

针对深度学习入门新手目标不明确 知识体系杂乱的问题 拟开启快速入门深度学习系列文章的创作 旨在帮助大家快速的入门深度学习 写在前面&#xff1a; 本系列按照吴恩达系列课程顺序发布(说明一下为什么不直接看原笔记 因为内容太多 没有大量时间去阅读 所有作者需要一次梳理…

KingBase问题篇

安装环境 操作系统&#xff1a;CentOS7 CPU&#xff1a;X86_64架构 数据库&#xff1a;KingbaseES_V008R006C009B0014_Lin64_install.iso 项目中遇到的问题 Q1. 执行sql中有字符串常量&#xff0c;且用双引号包裹&#xff0c;执行报错 A1. 默认KingBase不认双引号&#xff0…

濒危仙草的重生叙事:九仙尊米斛花节如何以雅集重构中医药文化IP

五月的霍山深处,层峦叠翠之间,中华仙草霍山米斛迎来一年一度的花期。九仙尊以“斛韵雅集,春野茶会”为主题,举办为期半月的米斛花文化节,融合中医药文化、东方美学与自然体验,打造一场跨越古今的沉浸式文化盛宴。活动涵盖古琴雅集、书法创作、茶道冥想、诗歌吟诵、民族歌舞等多…

LeetCode100.1 两数之和

今天晚上看了许多关于未来计算机就业的视频&#xff0c;有种正被贩卖焦虑的感觉&#xff0c;翻来覆去下决定先做一遍leetcode100给自己降降温&#xff0c;打算每周做四题&#xff0c;尽量尝试不同的方法与不同的语言。 一开始想到的是暴力解法&#xff0c;两层循环。数据量为1e…

python制造一个报错

以下是用Python制造常见错误的示例及解析&#xff0c;涵盖不同错误类型&#xff0c;便于理解调试原理&#xff1a; 一、语法错误 (SyntaxError) # 错误1&#xff1a;缺少冒号 if Trueprint("这行不会执行")# 错误2&#xff1a;缩进错误 def func(): print("未对…

idea整合maven环境配置

idea整合maven 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&#xff1a;每个知识点&#xff0c;都是写出代码…

Node.js中那些常用的进程通信方式

文章目录 1 什么是子进程?2 核心方法详解2.1 `child_process.spawn(command, [args], [options])`2.2 `child_process.exec(command, [options], callback)`2.3 `child_process.execFile(file, [args], [options], callback)`2.4 `child_process.fork(modulePath, [args], [op…

Vue3吸顶导航的实现

吸顶导航实现 【实现目标】&#xff1a; 在Layout页面中&#xff0c;浏览器上下滚动时&#xff0c;距离顶部距离大于80px吸顶导航显示&#xff0c;小于则隐藏。 【实现过程】&#xff1a; 通过layout接口获取分类列表内容并使用categorystore进行状态管理&#xff0c;获取到…

双向长短期记忆网络-BiLSTM

5月14日复盘 二、BiLSTM 1. 概述 双向长短期记忆网络&#xff08;Bi-directional Long Short-Term Memory&#xff0c;BiLSTM&#xff09;是一种扩展自长短期记忆网络&#xff08;LSTM&#xff09;的结构&#xff0c;旨在解决传统 LSTM 模型只能考虑到过去信息的问题。BiLST…

2025年Flutter项目管理技能要求

在2025年&#xff0c;随着Flutter技术的广泛应用和项目复杂度的提升&#xff0c;项目管理的重要性愈发凸显。Flutter项目管理不仅需要技术能力&#xff0c;还需要良好的沟通、协调、规划和执行能力。本文将详细探讨2025年Flutter项目管理应具备的技能要求&#xff0c;帮助项目管…

OpenCV CUDA模块中逐元素操作------数学函数

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在OpenCV的CUDA模块中&#xff0c;确实存在一系列用于执行逐元素数学运算的函数&#xff0c;包括指数、对数、平方根等。这些函数对于高级图像处…

PhpStudy | PhpStudy 工具安装 —— Kali Linux 系统安装 PhpStudy

&#x1f31f;想了解这个工具的其它相关笔记&#xff1f;看看这个&#xff1a;[网安工具] 服务器环境配置工具 —— PhpStudy 使用手册 笔者备注&#xff1a;演示虽然是 Kali Linux&#xff0c;但其实 Linux 系列都可以参考此流程完成安装。 在前面的章节中&#xff0c;笔者简…

第6讲、全面拆解Encoder、Decoder内部模块

全面拆解 Transformer 架构&#xff1a;Encoder、Decoder 内部模块解析&#xff08;附流程图小测验&#xff09; 关键词&#xff1a;Transformer、Encoder、Decoder、Self-Attention、Masked Attention、位置编码、残差连接、多头注意力机制 Transformer 自 2017 年诞生以来&am…

游戏引擎学习第283天:“让‘Standing-on’成为一个更严谨的概念

如果同时使用多个OpenGL上下文&#xff0c;并且它们都有工作负载&#xff0c;GPU或GPU驱动程序如何决定调度这些工作&#xff1f;我注意到Windows似乎优先处理活动窗口的OpenGL上下文&#xff08;即活动窗口表现更好&#xff09;&#xff0c;挺有意思的…… 当多个OpenGL上下文…

深度学习让鱼与熊掌兼得

通常,一个大的复杂的模型的loss会低,但是拟合方面不够,小的模型在拟合方面更好,但是loss高,我们可以通过深度学习来得到一个有着低loss的小模型 我们之前学过,peacewise linear可以用常数加上一堆这个阶梯型函数得到,然后因为peacewise linear可以逼近任何function,所以理论上…

如何在 AWS 上构建支持 AVIF 的前端图片优化方案

一、为什么使用 AVIF 图片格式&#xff1f; 优势点 说明 高压缩率 在相似质量下&#xff0c;AVIF 文件比 JPEG/PNG/WebP 更小&#xff0c;能有效节省带宽和存储空间。 更高画质 即使在低码率下也能保持清晰细节&#xff0c;减少压缩带来的马赛克或模糊问题。 支持透明度 …