华为OD机试之用户调度问题(Java源码)

news/2024/11/15 4:43:50/

用户调度问题

题目描述

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

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

规则:

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

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

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

输入描述

第一行表示用户个数n

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

输出描述

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

用例

输入

3
15 8 17
12 20 9
11 7 5

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

题目解析

这个题目有的人使用迭代去做,迭代的思想相对来说简单些。每次取出一个资源,并把索引记录下来。往下迭代产生结果。
这个题为在解决的时候使用了动态规划算法。不熟悉的可以参考我的另一篇博客。
【算法】使用数位算法生成0至某个数之间的整数(for循环之外的另一种实现方式,蛮长见识的)
针对上述用例,用图可以展示为
在这里插入图片描述
其中黄线区域所连接的为不可达,因为题目要求相邻的用户不能使用相同的调度策略
最后计算每个叶子节点路径和 并求出最小值即可。

示例代码java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;public class T49 {static int num[] = null;static int minResouce = Integer.MAX_VALUE;// 资源最小public static void main(String[] args) {Scanner sc = new Scanner(System.in);int userNo = Integer.parseInt(sc.nextLine());List<List<Integer>> resourceList = new ArrayList<List<Integer>>();for (int i = 0; i < userNo; i++) {List<Integer> resList = new ArrayList<Integer>();Arrays.stream(sc.nextLine().split(" ")).forEach(s -> resList.add(Integer.parseInt(s)));;resourceList.add(resList);}num = new int[userNo];System.out.println(resourceList);dfs(0, resourceList, -1);System.out.println(minResouce);}/*** * @param p            取第p个子列表* @param resourceList 所有的资源List* @param p1           上一个列表中取了哪一个索引*/public static void dfs(int p, List<List<Integer>> resourceList, int p1) {if (p >= resourceList.size()) {// 计算int sum = 0;for (int r : num) {sum += r;System.out.print(r + " ");}if (sum < minResouce) {minResouce = sum;}System.out.println();return;}List<Integer> itemList = resourceList.get(p);for (int i = 0; i < itemList.size(); i++) {if (i == p1)continue;num[p] = itemList.get(i);dfs(p + 1, resourceList, i); // i不能写成p 会产生错乱}}
}

代码运行示意图
在这里插入图片描述


http://www.ppmy.cn/news/360872.html

相关文章

升级丨AMAA汽车社媒营销归因升级,提升ROI还用愁吗?

“如其抱怨&#xff0c;不如享受卷的过程。昨天的手机行业&#xff0c;就是今天的汽车行业。” “以后国内可能只剩下五个 ‘东西南北中’&#xff0c;打麻将一样。” 在刚结束不久的2023年中国汽车重庆论坛&#xff08;CACS&#xff09;上&#xff0c;来自车企大佬们的“声音…

Vue中如何进行移动端适配与响应式布局?

Vue中如何进行移动端适配与响应式布局&#xff1f; 如今&#xff0c;移动端适配与响应式布局已经成为Web开发中不可或缺的一部分。Vue.js作为一款流行的JavaScript框架&#xff0c;也提供了许多有用的工具和技术来实现移动端适配和响应式布局。在这篇文章中&#xff0c;我们将…

python爬虫学习数据库需要学哪些

学习Python爬虫与数据库相关的知识&#xff0c;需要掌握以下几个方面&#xff1a; SQL语言&#xff1a;了解SQL语言的基本语法和常用操作&#xff0c;如SELECT、INSERT、UPDATE、DELETE等。 数据库管理系统&#xff1a;掌握至少一种数据库管理系统&#xff0c;如MySQL、Oracle…

uni-app省市区地址选择器

//支持h5 小程序 app //调用示例 <template><view class"content"><pickerAddress change"change">{{txt}}</pickerAddress></view> </template>import pickerAddress from pickerAddress.vueexport default {compone…

uniapp picker-view嵌入页面的滚动选择器(地区版 省市区三级联动)

//这里使用了插件市场的组件pcaPicker &#xff08;组件的代码放在最后了&#xff09; 连接&#xff1a;pcaPicker - DCloud 插件市场 1.引入组件 注册组件 使用组件 import pcaPicker from /components/pcaPicker/pcaPicker.vuecomponents: { pcaPicker },<pcaPicker r…

微信小程序--picke选择器(省市区城市)-- 使用taro开发

效果图 实现原理 利用微信小程序picke组件&#xff1a; 多列选择器&#xff1a;mode multiSelector 实现省市区三级联动参数类型如下&#xff1a; 或者可以去 官网查看. 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 area.js 城市JOSN数据&#x…

计算机部件识别方法,清华同方计算机部件识别办法.ppt

清华同方计算机部件识别办法 五、内存 5.1、记忆科技 记忆科技 容量 型号以及频率 右图右下角编码前6位为生产日期:如表示该内存是2003年45周第5日生产。 1&#xff5e;4表示年 5&#xff5e;6表示周 7表示星期 8表示批次 5.2、勤茂科技 勤茂科技 型号、频率和容量 表示该内存是…

富士康代工变弱?苹果倒戈和硕

吸引苹果的注意是富士康便宜劳工和高品质代工水平。所以苹果把首批iPhone 6的订单一半交给富士康。 当然。富士康不辱使命。而且出动所有人力和物力代工iPhone 6,顺利交货给苹果&#xff0c;但iPhone 6一度出现货源紧缺。负面消息不断&#xff0c;头发门和弯曲门打击着苹果&…