当前位置: 首页 > news >正文

【华为OD机考真题】- 用户调度问题(Java)

1. 题目描述
题目: 在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和 性能。假设当前有n个待串行调度用户,每个用户可以使用 A/B/C 三种不同的调度策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。
规则:
1、相邻的用户不能使用相同的调度策略,例如,第1个用户使用了 A策略,则第2 个用户只能使用 B或者 C 策略.
2、对单个用户而言,不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如,某用户分别使用 A/B/C 策略的系统消耗分别为 15/8/17。
3、每个用户依次选择当前所能选择的对系统盗源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。

2. 输入描述
第一行表示用户个数 n,接下来每一行表示一个用户分别使用三个策略的系统消耗 resA、resB、resC。

3. 输出描述
最优策略组合下的总的系统资源消耗数。

4. 示例演示
4.1 示例1
输入:

3
15 8 17
12 20 9
11 7 5

输出:

24

示例说明: 1号用户使用 B策略,2号用户使用C策略,3号用户使用B策略。系统资源消耗:8+9+7=24。
备注: 所有策略对系统的资源消耗均为正整数,n<1000。

4.2 示例2
输入:

3
1 2 3
4 5 6
7 8 9

输出:

13

 Java代码

package odTest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class clientDispatcher {
	static List<Integer> optList = new ArrayList<>();
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int num = Integer.parseInt(scanner.nextLine());
		
		int[][] systemRes = new int[num][3];
		for(int i=0;i<num;i++) {
			int[] input = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
			for(int j=0;j<num;j++) {
				systemRes[i][j] = input[j];
			}
		}
		choiceOptimiseGroup(systemRes,-1,num,0,0);
		Collections.sort(optList, new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				// TODO Auto-generated method stub
				if(o1>o2) {
					return 1; 
				}
				if(o1 == o2) {
					return 1;
				}
				return -1;
			}
		});
		System.out.println(optList.get(0));
		
	}

	private static void choiceOptimiseGroup(int[][] systemRes, int preStrategy,int num, int currentClient, int sum) {
		if(currentClient==num) {
			optList.add(sum);
			return;
		}
		for(int i=0;i<3;i++) {
			if(i==preStrategy) {
				continue;
			}
			sum = sum+systemRes[currentClient][i];
			choiceOptimiseGroup(systemRes,i,num,currentClient+1,sum);
			sum = sum-systemRes[currentClient][i];
		}
		
	}

}

相关文章:

  • C++相关基础概念之入门讲解(上)
  • 全面!陕西省10市企业技术中心申报条件奖补和认定补助材料、时间汇集
  • linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序
  • # 使用OpenAI Agents实现智能代理的生命周期管理
  • 32、构造函数
  • CentOS 系统安装 docker 以及常用插件
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • mapbox基础,使用线类型geojson加载symbol符号图层,用于标注文字
  • 零信任架构实战手册-企业安全升级
  • 【AD】6-1 PCB常用规则
  • 7年全栈开发经验 · 兼职技术合作
  • 基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别
  • 【协议篇】RPC、gRPC
  • React封装axios请求方法
  • 在Vue3中集成XGPlayer视频播放器的完整指南
  • 鸿蒙 Next 实现线程之间的通信
  • export HADOOP_CLASSPATH=`hadoop classpath`
  • 将大模型输出答案清洗数学公式格式为markdown文件
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(49)万鸦壶焚网络 - 网络延迟时间(Bellman-Ford)
  • 使用 Doris 和 LakeSoul
  • 为俄乌一日三通电话,这里成“关键战场”?
  • 西岸大剧院夏秋演出季公布,阿云嘎制作《风声》9月驻演
  • 海南省市监局与香港标准及检定中心签署合作协议,加快检验检测国际化
  • 河北6人在河道倒污泥被控污染环境案撤诉后,已拿到国赔决定书
  • 4天内,云南昆明又一县市区原主官被查
  • 新冠阳性率升高,专家:新冠变异株致病力没太多变化