目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 1、核心思想:
- 2、说人话:
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和性能。
假设当前有n个待串行调度用户,每个用户可以使用A/B/C三种不同的调度策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。
规则:
- 相邻的用户不能使用相同的调度策略,例如,第1个用户使用了A策略,则第2个用户只能使用B或者C策略。
- 对单个用户而言,不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如,某用户分别使用A/B/C策略的系统消耗分别为15/8/17。
- 每个用户依次选择当前所能选择的对系统资源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。
二、输入描述
第一行表示用户个数n。
接下来每一行表示一个用户分别使用三个策略的系统消耗。
三、输出描述
最优策略组合下的总的系统资源消耗数。
四、解题思路
1、核心思想:
- 每个用户依次选择当前所能选择的对系统资源消耗最少的策略;
- 相邻的用户不能使用相同的调度策略
2、说人话:
- 选择每一行最小的值;
- 并且不能选择和上一行策略相同的那个数
这就简单了。
选择第一行最小的数,计算下一行“最小数”的时候,不能考虑和前一行策略相同的那个数。
五、Java算法源码
package com.guor.od;import java.util.*;/*** 1、相邻的用户不能使用相同的调度策略(共三种)* 2、每个用户依次选择当前所能选择的对系统资源消耗最少的策略*/
public class OdTest03 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 用户个数nint n = Integer.parseInt(sc.nextLine());// 满足条件的最小值之和int sum = 0;// 前一行最小值下角标int preMinIndex = -1;for (int i = 0; i < n; i++) {// 三种不同的调度策略值int[] line = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 当前行的最小值int min = Integer.MAX_VALUE;// 当前行最小值下角标int minIndex = -1;// 遍历三种不同的调度策略值for (int j = 0; j < line.length; j++) {// 取当前行的最小值,最小值的下角标不等于上一行最小值的下角标if (line[j] < min && preMinIndex != j) {min = line[j];// 当前行"最小值"下角标minIndex = j;}}// 更新上一行最小值的下角标preMinIndex = minIndex;System.out.println(min);// 满足条件的最小值之和sum += min;}// 输出满足条件的最小值之和System.out.println(sum);}
}
六、效果展示
1、输入
5
15 12 9
26 17 12
9 7 8
10 12 15
10 15 20
2、输出
59
3、说明
- 1号用户使用C策略9;
- 2号用户使用B策略17;
- 3号用户使用C策略8;
- 4号用户使用A策略10;
- 5号用户使用B策略15;
- 9 + 17 + 8 + 10 + 15 = 59
故输出59
🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。