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

这篇具有很好参考价值的文章主要介绍了华为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
15 8 17
12 20 9
11 7 5

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

题目解析

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

示例代码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源码)文章来源地址https://www.toymoban.com/news/detail-481073.html

到了这里,关于华为OD机试之用户调度问题(Java源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为OD机试之全量和已占用字符集(Java源码)

    题目描述 给定两个字符集合,一个是全量字符集,一个是已占用字符集,已占用字符集中的字符不能再使用。 输入描述 输入一个字符串 一定包含@,@前为全量字符集 @后的为已占用字符集 已占用字符集中的字符一定是全量字符集中的字符 字符集中的字符跟字符之间使用英文

    2024年02月07日
    浏览(39)
  • 华为OD机试之阿里巴巴找黄金宝箱(II)(Java源码)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~n 的箱子,每个箱子上面贴有箱子中藏有金币的数量。 从金币数量中选出一个数字集合,并销毁贴有这些数字的每个箱子,如果能销毁一半及以上的箱子,则返回这个数字

    2024年02月09日
    浏览(37)
  • 华为OD机试之最小调整顺序次数、特异性双端队列(Java源码)

    题目描述 有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但是只能从头部移出数据。 小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添加数据(可能从头部添加、也可能从尾部添加),依次添加1到n;n个指令是移出数据。 现在要求移除数据

    2024年02月07日
    浏览(34)
  • 【华为OD统一考试B卷 | 100分】用户调度问题(C++ Java JavaScript Python)

    在线OJ 已购买本专栏用户,请私信博主开通账号,在线刷题!!! 运行出现 Runtime Error 0Aborted,请忽略 华为OD统一考试A卷+B卷 新题库说明 2023年5月份,华为官方已经将的 2022/0223Q(1/2/3/4)统一修改为OD统一考试(A卷)和OD统一考试(B卷)。 你收到的链接上面会标注A卷还是B卷。

    2024年02月09日
    浏览(31)
  • 华为OD机试之阿里巴巴找黄金宝箱(I)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字之和; 第一个箱子左边部

    2024年02月09日
    浏览(32)
  • 华为OD机试 - 机场航班调度程序(Java & JS & Python & C)

    题目描述 XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。 但是XX市机场只有一条起飞跑道,调度人员需要安排目前停留在机场的航班有序起飞。 为保障航班的有

    2024年02月03日
    浏览(30)
  • 华为OD机试真题 Java 实现【工单调度策略】【2023 Q1 | 100分】

        所有题目均有四种语言实现。 C++ 实现目录 、 Python实现目录 、 Java实现目录 、 JavaScript实现目录 题目描述:         当小区通信设备上报告警时,系统会自动生成待处理的工单,华为工单调度系统需要根据不同的策略,调度外线工程师(FME)上站去修复工单对应的

    2023年04月08日
    浏览(39)
  • 【免费题库】华为OD机试 - 机场航班调度程序(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。 但是XX市机场只有

    2024年04月15日
    浏览(25)
  • 【华为OD机考 统一考试机试C卷】机场航班调度(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月20日
    浏览(29)
  • 【华为OD机考 统一考试机试C卷】GPU 调度/执行时长(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月20日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包