华为OD机考2025B卷 - 用户调度问题(Java & Python& JS & C++ & C )

最新华为OD机试

真题目录:点击查看目录
华为OD面试真题精选:点击立即查看

题目描述

在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和性能。

假设当前有n个待串行调度用户,每个用户可以使用A/B/C三种不同的调度策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。

规则:

  1. 相邻的用户不能使用相同的调度策略,例如,第1个用户使用了A策略,则第2个用户只能使用B或者C策略。

  2. 对单个用户而言,不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如,某用户分别使用A/B/C策略的系统消耗分别为15/8/17。

  3. 每个用户依次选择当前所能选择的对系统资源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。

输入描述

第一行表示用户个数n

接下来每一行表示一个用户分别使用三个策略的系统消耗resA resB resC

输出描述

最优策略组合下的总的系统资源消耗数

示例1

输入

3
15 8 17
12 20 9
11 7 5

输出

24

说明

1号用户使用B策略,2号用户使用C策略,3号用户使用B策略。系统资源消耗: 8 + 9 + 7 = 24。

解题思路

本题求的是局部最优解,而不是全局最优解。

为什么是局部最优解?

题目要求每个用户依次选择当前所能选择的最小资源消耗策略,并且若有多个策略的资源消耗相同,则选择最后一个策略。这种选择策略本身就是一个局部最优选择的过程:

  1. 每个用户的选择是独立的,只考虑该用户的策略和相邻用户的约束,不考虑整个调度序列的全局资源消耗。

  2. 每个用户根据自己的当前状态(即自己的三种选择的资源消耗)做出局部最优选择:在当前可选的策略中,选择消耗最小的那个。如果有多个最小值,则选择最后一个(根据题意)。这一选择是局部的最优,即在当下最有利的选择,但并不保证最终的整体系统资源消耗是最小的。

举个例子:

考虑以下输入:

3
15 8 17
12 20 9
11 7 5
第一位用户:
  • 资源消耗分别是:A=15, B=8, C=17。
  • 用户选择B,因为B的资源消耗是最小的(8)。此时做出了局部最优选择。
第二位用户:
  • 资源消耗分别是:A=12, B=20, C=9。
  • 用户不能选择B(因为相邻用户已经选择了B),所以只能在A和C之间选择。此时选择

你可能感兴趣的:(最新华为OD机试真题,华为OD机试真题,(Java/JS/Py/C),java,华为od,python,javascript,c++)