华为OD机试之用户调度问题(Java源码)
用户调度问题
题目描述
在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和性能。
假设当前有n个待串行调度用户,每个用户可以使用A/B/C三种不同的调度策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。
规则:
1. 相邻的用户不能使用相同的调度策略,例如,第1个用户使用了A策略,则第2个用户只能使用B或者C策略。
2. 对单个用户而言,不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如,某用户分别使用A/B/C策略的系统消耗分别为15/8/17。
3. 每个用户依次选择当前所能选择的对系统资源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。
输入描述
第一行表示用户个数n
接下来每一行表示一个用户分别使用三个策略的系统消耗resA resB resC
输出描述
最优策略组合下的总的系统资源消耗数
用例
输入 |
3 |
输出 | 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 会产生错乱}}
}
代码运行示意图
华为OD机试之用户调度问题(Java源码)相关推荐
- 【华为OD机试真题2023 JAVA】不含101的数
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 不含101的数 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 小明在学习二进制时,发现了一类不含101的数,也就是: ...
- 【华为OD机试真题2023 JAVA】硬件产品销售方案
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 硬件产品销售方案 知识点递归数组DFS搜索回溯 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 某公司目前推出了AI开发 ...
- 【华为OD机试真题2023 JAVA】网上商城优惠活动(一)
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 网上商城优惠活动(一) 时间限制:1s 空间限制:50MB 限定语言:不限 题目描述: [背景] 某网上商城举办优惠活动,发布了满减.打折 ...
- 【华为OD机试真题2023 JAVA】字母组合
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 字母组合 知识点回溯 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 每个数字对应多个字母,对应关系如下: 0:a,b, ...
- 【满分】【华为OD机试真题2023 JAVA】 打印文件
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 打印文件 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 有5台打印机打印文件,每台打印机有自己的待打印队列.因为打印的 ...
- 【华为OD机试真题2023 JAVA】几何平均值最大子数组
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 几何平均值最大子数组 知识点数组二分查找 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 从一个长度为N的正数数组num ...
- 华为OD机试 - 英文输入法(Java JS Python)
题目描述 主管期望你来实现英文输入法单词联想功能. 需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列, 如果联想不到,请输出用户输入的单词前 ...
- 华为OD机试真题(Java),根据员工出勤信息,判断本次是否能获得出勤奖(100%通过+复盘思路)
一.题目描述 公司用一个字符串来标识员工的出勤信息 absent:缺勤 late:迟到 leaveearly:早退 present:正常上班 现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤 ...
- 华为OD机试 - 预订酒店(Java JS Python)
题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的 ...
最新文章
- 成都2018年GDP超1.5万亿元 比上年增长8.0%
- java简单springboot系统_Springboot系列 3 - 建立简单的用户登录系统
- Android下载图片路径问题
- android模拟器启动没有拨号功能
- customizing download debug - extraction in ERP
- 基于ARM Cortex-M0+ 的Bootloader 参考
- 阿里云与MongoDB达成战略合作,成“唯一”;苹果将推出三款5G版iPhone;谷歌正式推出 TensorFlow 企业版……...
- 华为c语言编程规范_C语言编程规范
- Java笔记-非对称加密RSA的使用
- SpringBoot之项目运行常见报错
- 图像分割总体介绍——深度AI科普团队
- [2013.9.4]一个入门级别的破解教程。。。
- Rust :CC编译
- c 语言 如何优化cpu占用率,C#程序优化-有效减少CPU占用率
- BCrypt算法,想想spring security里的BCryptPasswordEncoder
- 室内定位的电子地图编辑工具
- 2_计算机网络_数据链路层-交换机-以太网-vlan-trunk
- Word 任意页插入页码
- 区分阿里云系统盘和数据盘
- 【Python数据分析】房价数据分析实战(包含源码和数据)