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

news2024/11/19 11:18:33

用户调度问题

题目描述

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

假设当前有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.coloradmin.cn/o/641344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI + 非遗文化主题师资培训落地,飞桨持续赋能AI人才培养

随着数字浪潮袭来&#xff0c;人工智能的发展声势浩大&#xff0c;高校人工智能专业建设以及 AI 的人才培养已经提上日程。如何夯实产教融合&#xff0c;加快人工智能研究创新&#xff0c;培养具备 AI 系统能力的拔尖人才&#xff0c;是推进产业智能化升级的迫切课题。6月2日-4…

2023年国内五大 IoT 物联网平台费用对比

五大物联网平台费用对比 随着物联网发展进入成熟期&#xff0c;越来越多企业选择云厂商提供的物联网PaaS服务&#xff0c;以降低运营成本&#xff0c;缩短业务上线周期&#xff0c;释放运维的人力&#xff0c;按需付费动态扩容。笔者基于各云厂商2023年4月的官网报价&#xff0…

【笑小枫系列】Java加密那点事,本文给你讲的明明白白

本文简介 相信大家在日常工作中都遇到过加密的场景吧&#xff0c;像登录密码加密保存、无token接口验签、数据加密传输等等。 本文将详细的介绍一下加密的方式&#xff0c;并分析使用场景&#xff0c;并会以详细的代码完整的介绍如何使用加密&#xff0c;让小伙伴们遇到加密时…

docker-consul服务发现部署

什么是consul consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法&#xff0c;用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案&…

Redis 分布式集群操作

文章目录 连接集群写入数据单个key写入批量key操作 集群查询查询 key 的 slot查询 slot 中 key 的数量查询 slot 中的 key 故障转移Master宕机Master 和 Slave 都宕机 集群扩容1.启动两个节点2.添加 master3.分配slot4.添加 slave 集群缩容1.删除 slave 节点2.移出 master 的 s…

【K8SRockyLinux】基于开源操作系统搭建K8S高可用集群(详细版)

文章目录 一、实验节点规划表&#x1f447;二、实验版本说明&#x1f4c3;三、实验拓扑&#x1f4ca;四、实验详细操作步骤&#x1f579;️1. 安装Rocky Linux开源企业操作系统2. 所有主机系统初始化3. 所有master节点部署keepalived4. 所有master节点部署haproxy5. 所有节点配…

睿智医药×企通启动采购与供应链管理项目,加速医药领域数智采购

随着世界经济发展、人口总量增长、人口老龄化程度提高以及人们保健意识增强&#xff0c;新型国家城市化建设的推进和各国医疗保障体制的不断完善&#xff0c;全球医药市场呈持续增长趋势。在政策、资本、技术等因素催化下&#xff0c;我国生物医药行业研发创新实力稳步增强&…

Three.js教程:渲染器

推荐&#xff1a;将 NSDT场景编辑器加入你的3D工具链。 其他系列工具&#xff1a; NSDT简石数字孪生 渲染器 生活中如果有了景物和相机&#xff0c;那么如果想获得一张照片&#xff0c;就需要你拿着相机&#xff0c;按一下&#xff0c;咔&#xff0c;完成拍照。对于threejs而言…

《西部学刊》期刊简介及投稿邮箱

《西部学刊》是经国家新闻出版总署批准&#xff0c;由陕西新华出版传媒集团主管、主办的面向国内外公开发行的综合性哲学社会科学学术期刊。2014年&#xff0c;被国家新闻出版广电总局认定为第一批学术期刊。 《 西部学刊》以全球视野&#xff0c;关注中国西部&#xff0c;聚焦…

webpack生成模式配置

一、生产模式和开发模式介绍 生成模式&#xff08;production mode&#xff09;是指在开发完成后将代码部署到生产环境中运行的模式&#xff0c;通常需要进行代码压缩、优化、合并&#xff0c;以减少文件大小和请求次数&#xff0c;提高页面加载速度和运行效率。 开发模式&am…

生成式人工智能将会对Salesforce的CRM系统护城河构成破坏性威胁

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 第一季度财务业绩 由于Salesforce(CRM)对2024财年的预测挫败了投资者对其人工智能业务前景的信心&#xff0c;所以猛兽财经认为&#xff0c;Salesforce今年的股价反弹可能已经结束了。尽管该公司在第一季度实现了令人印象深…

母婴商家怎么建立自己的品牌,母婴产品传播渠道总结

随着互联网的发展逐渐深入我们的生活&#xff0c;线上传播的模式也越来越被大家熟知。越来越多的行业开始重视线上传播。那么母婴商家怎么建立自己的品牌&#xff0c;母婴产品传播渠道总结。 其实&#xff0c;母婴产品线上用户群体众多&#xff0c;且母婴产品用户目的明确&…

5_普通最小二乘法线性回归案例(Scikit-learn 0.18.2)

现有一批描述家庭用电情况的数据&#xff0c;对数据进行算法模型预测&#xff0c;并最终得到预测模型&#xff08;每天各个时间段和功率之间的关系、功率与电流之间的关系等&#xff09; 数据来源&#xff1a;Individual household electric power consumption Data Set建议&am…

Meta开源音乐生成AI模型MusicGen;直白图解GPT2模型Self Attention注意力机制

&#x1f989; AI新闻 &#x1f680; Meta开源音乐生成AI模型MusicGen 摘要&#xff1a;Meta在Github上开源了其AI语言模型MusicGen&#xff0c;该模型基于Google 2017年推出的Transformer模型&#xff0c;可将文本和旋律转化为完整乐曲。MusicGen支持文本与旋律的组合输入&a…

Python实现ACO蚁群优化算法优化XGBoost回归模型(XGBRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

AD板子定位孔打孔的两种方式

第一种 注意 直径大小要和 开孔直径一样。 Plated 这个勾打掉 去掉金属壁. 还要X Y坐标 添加一样。 孔位对齐 第二种 选中要开孔的圆 切到机械1层 快捷键 T V B 看效果 总结&#xff1a;第二种最简单

SpringBoot源码-自动装配

一、自动装配原理图 二、入口 springboot的核心注解SpringBootApplication 接着看 SpringBootApplication 注解 截图&#xff1a; 代码&#xff1a; Target({ElementType.TYPE}) //注解的适用范围&#xff0c;Type表示注解可以描述在类、接口、注解或者枚举中 Retention(Ret…

10种常用的数据分析思路

概要 数据分析的思路及其重要&#xff0c;以致于我们总是忽略它&#xff0c;重“术”而轻“道”&#xff0c;但其实应该一视同仁。这篇文章讲了表单分析、用户分析、埋点分析、聚类分析等10种分析方法&#xff0c;先学为敬~ 道家曾强调四个字&#xff0c;叫“道、法、术、器”…

MUR8060PT-ASEMI大电流快恢复二极管80A 600V

编辑&#xff1a;ll MUR8060PT-ASEMI大电流快恢复二极管80A 600V 型号&#xff1a;MUR8060PT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247 最大漏源电流&#xff1a;80A 漏源击穿电压&#xff1a;600V 引脚数量&#xff1a;2 恢复时间&#xff1a;22ns 正向压降&am…

NIO 基础

3. 文件编程 non-blocking io 非阻塞 IO 1.1 Channel & Buffer channel 类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入&#…