用户调度问题

题目描述

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

假设当前有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 会产生错乱}}
}

代码运行示意图

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

  1. 【华为OD机试真题2023 JAVA】不含101的数

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 不含101的数 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 小明在学习二进制时,发现了一类不含101的数,也就是: ...

  2. 【华为OD机试真题2023 JAVA】硬件产品销售方案

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 硬件产品销售方案 知识点递归数组DFS搜索回溯 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 某公司目前推出了AI开发 ...

  3. 【华为OD机试真题2023 JAVA】网上商城优惠活动(一)

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 网上商城优惠活动(一) 时间限制:1s 空间限制:50MB 限定语言:不限 题目描述: [背景] 某网上商城举办优惠活动,发布了满减.打折 ...

  4. 【华为OD机试真题2023 JAVA】字母组合

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 字母组合 知识点回溯 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 每个数字对应多个字母,对应关系如下: 0:a,b, ...

  5. 【满分】【华为OD机试真题2023 JAVA】 打印文件

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 打印文件 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 有5台打印机打印文件,每台打印机有自己的待打印队列.因为打印的 ...

  6. 【华为OD机试真题2023 JAVA】几何平均值最大子数组

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 几何平均值最大子数组 知识点数组二分查找 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 从一个长度为N的正数数组num ...

  7. 华为OD机试 - 英文输入法(Java JS Python)

    题目描述 主管期望你来实现英文输入法单词联想功能. 需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列, 如果联想不到,请输出用户输入的单词前 ...

  8. 华为OD机试真题(Java),根据员工出勤信息,判断本次是否能获得出勤奖(100%通过+复盘思路)

    一.题目描述 公司用一个字符串来标识员工的出勤信息 absent:缺勤 late:迟到 leaveearly:早退 present:正常上班 现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤 ...

  9. 华为OD机试 - 预订酒店(Java JS Python)

    题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的 ...

最新文章

  1. 成都2018年GDP超1.5万亿元 比上年增长8.0%
  2. java简单springboot系统_Springboot系列 3 - 建立简单的用户登录系统
  3. Android下载图片路径问题
  4. android模拟器启动没有拨号功能
  5. customizing download debug - extraction in ERP
  6. 基于ARM Cortex-M0+ 的Bootloader 参考
  7. 阿里云与MongoDB达成战略合作,成“唯一”;苹果将推出三款5G版iPhone;谷歌正式推出 TensorFlow 企业版……...
  8. 华为c语言编程规范_C语言编程规范
  9. Java笔记-非对称加密RSA的使用
  10. SpringBoot之项目运行常见报错
  11. 图像分割总体介绍——深度AI科普团队
  12. [2013.9.4]一个入门级别的破解教程。。。
  13. Rust :CC编译
  14. c 语言 如何优化cpu占用率,C#程序优化-有效减少CPU占用率
  15. BCrypt算法,想想spring security里的BCryptPasswordEncoder
  16. 室内定位的电子地图编辑工具
  17. 2_计算机网络_数据链路层-交换机-以太网-vlan-trunk
  18. Word 任意页插入页码
  19. 区分阿里云系统盘和数据盘
  20. 【Python数据分析】房价数据分析实战(包含源码和数据)

热门文章

  1. python中eval的用法?
  2. 微信公众号在线客服接入发方法和功能详解
  3. Oculus Rift S丨(一)软件安装及基本配置,接入SDK
  4. 深入理解Java Binder
  5. 如何建立有效的项目管理制度?
  6. 遇到的debug整理20190107
  7. 又有9名程序员被抓,这次真的活该!
  8. 极客圈(一)树莓派3B协同Python打造个性化天气闹钟
  9. linux 平铺式桌面,Linux下5 个很酷的平铺窗口管理器
  10. 计算分组数据中的平均值