华为OD机考算法题:高效的任务规划

题目部分

题目高效的任务规划
难度
题目说明

你有 n 台机器编号为 1 ~ n,每台都需要完成一项工作, 机器经过配置后都能独立完成一项工作。 假设第 台机器你需要花 B_{i} 分钟进行设置, 然后开始运行, J_{i} 分钟后完成任务。 现在,你需要选择布置工作的顺序,使得用最短的时间完成所有工作。 注意,不能同时对两台进行配置, 但配置完成的机器们可以同时执行他们各自的工作。

输入描述第一行输入代表总共有 M 组任务数据(1 < M <= 10)。
每组数第一行为一个整数指定机器的数量 N (0 < N <= 1000)。 随后的 N 行每行两个整数,第一个表示 B (0 <= B <= 10000), 第二个表示 J (0 <= J <= 10000)。
每组数据连续输入,不会用空行分割,各组任务单独计时。
输出描述对于每组任务,输出最短完成时间, 且每组的结果独占一行。 例如两组任务就应该有两行输出。
补充说明
------------------------------------------------------
示例
示例1
输入1
1
2 2
输出4
说明输出共 3 行数据,第 1 行代表只有 1 组数据;第 2 行代表本组任务只有 1 台机器;第 3 行代表本机器:配置需要 2 分钟,执行需要 2 分钟。输出 1 行数据,代表执行结果为 4 分钟。 
示例2
输入2
2
1 1
2 2
3
1 1
2 2
3 3 
输出4
7
说明第一行代表输入共 2 组数据, 2 - 4 行代表第一组数据,为 2 台机器的配置、执行信息(第 1 台机器:配置需要 1 分钟,执行需要 1 分钟;第 2 台机器:配置需要 2 分钟,执行需要 2 分钟)。5 - 8 行代表第二组数据,为 3 台机器的配置、执行信息(意义同上)。输出共 2 行,分别代表第 1 组任务共需要 4 分钟和第 2 组任务需要 7 分钟(先配置 3,在配置 2,最后配置 1,执行 1 分钟,共 7 分钟)。


解读与分析

题目解读

每台机器只有配置了才能执行。而在同一个时间段只能执行一台机器的配置(配置串行执行),在配置完成后,任务即可执行。
求出执行完所有任务的时间。

分析与思路

对于每一组数据,可以采取贪心算法,遍历所有的组合情况,求出每种情况所需要的时间,经比较,输出时间最小的数字。

此算法的时间复杂度为 O(n^{2}),空间复杂度为  O(n^{2})。


代码实现

Java代码

import java.util.Scanner;/*** 高效的任务规划* * @since 2023.10.25* @version 0.1* @author Frank**/
public class EfficientTaskPlan {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();int groupCnt = Integer.parseInt(input);int[] outputValues = new int[ groupCnt ];for( int i = 0; i < groupCnt; i ++ ){input = sc.nextLine();int machineCnt = Integer.parseInt( input );int [][] taskInfo = new int[machineCnt][2];for( int j = 0; j < machineCnt; j ++ ){input = sc.nextLine();String[] eachMachineStr = input.split( " " );int[] eachMachine = new int[2];eachMachine[0] = Integer.parseInt( eachMachineStr[0] );eachMachine[1] = Integer.parseInt( eachMachineStr[1] );taskInfo[j] = eachMachine;}int[] usedFlag = new int[taskInfo.length];for( int j = 0; j < usedFlag.length; j ++ ){usedFlag[j] = 0;}outputValues[i] = caculateEachGroupTaskPlan( usedFlag, taskInfo, 0 );}for( int i = 0; i < groupCnt; i ++ ){System.out.println( outputValues[i] );}}}private static int caculateEachGroupTaskPlan( int[] usedFlag, int [][] taskInfo, int curTask ) {int minTimeTake = Integer.MAX_VALUE;for( int i = 0; i < taskInfo.length; i ++ ){if( usedFlag[i] == 1 ){continue;}int tmpConfig = taskInfo[i][0];int tmpTask = taskInfo[i][1];usedFlag[i] = 1;int curTimeTake = tmpConfig + caculateEachGroupTaskPlan( usedFlag, taskInfo, tmpTask );usedFlag[i] = 0;if( curTimeTake <= curTask ){return curTask;}if( curTimeTake < minTimeTake ){minTimeTake = curTimeTake;}}	if( minTimeTake < curTask || minTimeTake == Integer.MAX_VALUE ){minTimeTake = curTask;}return minTimeTake;}
}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {var groupCnt = parseInt(line);var outputValues = new Array();for (var i = 0; i < groupCnt; i++) {line = await readline();var machineCnt = parseInt(line);var taskInfo = new Array();for (var j = 0; j < machineCnt; j++) {line = await readline();var eachMachineStr = line.split(" ");var eachMachine = new Array();eachMachine[0] = parseInt(eachMachineStr[0]);eachMachine[1] = parseInt(eachMachineStr[1]);taskInfo[j] = eachMachine;}var usedFlag = new Array();for (var j = 0; j < groupCnt; j++) {usedFlag[j] = 0;}outputValues[i] = caculateEachGroupTaskPlan(usedFlag, taskInfo, 0);}for (var i = 0; i < groupCnt; i++) {console.log(outputValues[i]);}}
}();function caculateEachGroupTaskPlan(usedFlag, taskInfo, curTask) {var minTimeTake = Number.MAX_VALUE;for (var i = 0; i < taskInfo.length; i++) {if (usedFlag[i] == 1) {continue;}var tmpConfig = taskInfo[i][0];var tmpTask = taskInfo[i][1];usedFlag[i] = 1;var curTimeTake = tmpConfig + caculateEachGroupTaskPlan(usedFlag, taskInfo, tmpTask);usedFlag[i] = 0;if (curTimeTake <= curTask) {return curTask;}if (curTimeTake < minTimeTake) {minTimeTake = curTimeTake;}}if (minTimeTake < curTask || minTimeTake == Number.MAX_VALUE) {minTimeTake = curTask;}return minTimeTake;
}

(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/173265.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机构建部署单体项目及前后端分离项目

目录 一.部署单体项目 1.远程数据库 1.1远程连接数据库 1.2 新建数据库运行sql文件 2.部署项目到服务器中 3.启动服务器运行 二.部署前后端分离项目 1.远程数据库和部署到服务器 2.利用node环境启动前端项目 3.解决主机无法解析服务器localhost问题 方法一 ​编辑 方…

Illustrator 2024(AI v28.0)

Illustrator 2024是一款功能强大的矢量图形编辑软件&#xff0c;由Adobe公司开发。它是设计师、艺术家和创意专业人士的首选工具&#xff0c;用于创建和编辑各种矢量图形、插图、图标、标志和艺术作品。 以下是Adobe Illustrator的主要功能和特点&#xff1a; 矢量图形编辑&…

命令模式——让程序舒畅执行

● 命令模式介绍 命令模式&#xff08;Command Pattern&#xff09;&#xff0c;是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多条条框框&#xff0c;其实并不是一个很“规矩”的模式&#xff0c;不过&#xff0c;就是基于一点&#xff0c;命令模式相对于…

实战授权码登录流程

我是经常阅读公众号优质文章&#xff0c;也经常体验到公众号的授权登录功能。今天就来实现下&#xff0c;流程图如下 效果图 后端接口 主要用来接收微信服务器推送的公众号用户触发的事件、生成和验证授权码的有效性 解析微信服务器推送的事件通知 public String login(Se…

MySQL 概述 数据库表操作 数据增删改

目录 MySQL概述前言安装与配置MySQL登录与卸载 数据模型概述SQL简介SQL通用语法简介SQL分类 数据库设计(数据库操作)-DDL数据库操作查询数据库 show databases、select database()创建数据库 create database使用数据库 use删除数据库 drop database 图形化工具连接数据库操作数…

Node.js中的单线程服务器

为了解决多线程服务器在高并发的I/O密集型应用中的不足&#xff0c;同时避免早期简单单线程服务器的性能障碍&#xff0c;Node.js采用了基于"事件循环"的非阻塞式单线程模型&#xff0c;实现了如下两个目标&#xff1a; &#xff08;1&#xff09;保证每个请求都可以…

通过el-tree 懒加载树,创建国家地区四级树

全国四级行政地区树数据库sql下载路径&#xff1a;【免费】全国四级地区(省市县)数据表sql资源-CSDN文库https://download.csdn.net/download/weixin_51722520/88469807?spm1001.2014.3001.5503 我在后台获取地区信息添加了限制&#xff0c;只获取parentid为当前的地…

[AUTOSAR][诊断管理][ECU][$34] 下载请求

文章目录 一、简介二、服务请求报文定义肯定响应支持的NRC三、示例代码34_req_dowload.c一、简介 RequestDownload(0x34)—— 下载请求 这个服务主要是用来给ECU下载数据的,最常见的应用就是在bootloader中,程序下载工具会发起下载请求,以完成ECU程序的升级。 二、服务…

计算线阵相机 到 拍摄产品之间 摆放距离?(隐含条件:保证图像不变形)

一物体被放置在传送带上&#xff0c;转轴的直径为100mm。已知线阵相机4K7u&#xff08;一行共4096个像素单元&#xff0c;像素单元大小7um&#xff09;&#xff0c;镜头35mm&#xff0c;编码器2000脉冲/圈。保证图像不变形的条件下&#xff0c;计算相机到产品之间 摆放距离&…

国际阿里云CDN加速OSS资源教程!

当您需要加速OSS上的静态资源时&#xff0c;可以通过阿里云CDN加速OSS域名&#xff0c;实现静态资源的访问加速。本文详细介绍了通过CDN控制台实现OSS加速的操作流程和应用场景。 客户价值 阿里云OSS可提供低成本的存储&#xff0c;CDN可以实现静态资源加速分发。使用OSS作为C…

Linux学习第24天:Linux 阻塞和非阻塞 IO 实验(一): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 在正式开始今天的笔记之前谈一下工作中遇见的一个问题。 本篇笔记主要学习Linux 阻塞和非阻塞 IO 实验&#xff0c;主要包括阻塞和非阻塞简介、等待队列、轮询、…

05.大模型大数据量

文章目录 大模型顿悟时刻&#xff1a;Emergent Ability&#xff08;涌动现象&#xff09;Calibration Inverse Scaling PrizeSwitch Transformers 大数据量数据预处理去重 模型大小与训练数据的选择Instruction-tuningHuman TeachingKNN LM 部分截图来自原课程视频《2023李宏毅…

NewStarCTF2023week4-Nmap

题目要我们找出Nmap扫描得到所有的开放端口 Nmap通常用于直接扫描目标主机&#xff0c;而不是直接扫描pcap文件。 那么这里我们还是使用wireshark来分析&#xff0c;使用过滤器&#xff1a; tcp.flags.syn 1 and tcp.flags.ack 1 这个过滤条件可以筛选出TCP端口开放的数据…

Games104现代游戏引擎笔记 网络游戏架构基础

挑战1:网络同步 挑战2:是网络的可靠性&#xff0c;包括应对网络的延迟&#xff0c;丢包和掉线 挑战3: 反作弊和安全系统&#xff0c;因为网络游戏的本质是经济系统 挑战4:多样性(不同设备&#xff0c;不同服务器)&#xff0c;在不停服的情况下热更新 挑战5:大量人数时对高并发…

MySQL(1):开始

概述 DB&#xff1a;数据库&#xff08;Database&#xff09; 即存储数据的“仓库”&#xff0c;其本质是一个文件系统。它保存了一系列有组织的数据。 DBMS&#xff1a;数据库管理系统&#xff08;Database Management System&#xff09; 是一种操纵和管理数据库的大型软件…

目标检测算法改进系列之嵌入Deformable ConvNets v2 (DCNv2)

Deformable ConvNets v2 简介&#xff1a;由于构造卷积神经网络所用的模块中几何结构是固定的&#xff0c;其几何变换建模的能力本质上是有限的。在DCN v1中引入了两种新的模块来提高卷积神经网络对变换的建模能力&#xff0c;即可变形卷积 (deformable convolution) 和可变形…

【微信小程序开发】学习小程序的网络请求和数据处理

前言 网络请求是微信小程序中获取数据和与服务器交互的重要方式。微信小程序提供了自己的API来处理网络请求&#xff0c;使得开发者可以轻松地在微信小程序中实现数据的获取和提交。本文将介绍微信小程序中的网络请求&#xff0c;包括使用wx.request发起GET和POST请求&#xf…

Kotlin协程核心理解

一、协程是什么&#xff1f; 1.1 基本概念的理解 我们知道JVM中的线程的实现是依赖其运行的操作系统决定的&#xff0c;JVM只是在上层进行了API的封装&#xff0c;包含常见的有线程的启动方法&#xff0c;状态的管理&#xff0c;比如&#xff1a;Java中抽象出了6种状态&#x…

数据结构与算法之矩阵: Leetcode 134. 螺旋矩阵 (Typescript版)

螺旋矩阵 https://leetcode.cn/problems/spiral-matrix/ 描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示…

人工智能(AI)在医疗领域的应用

人工智能&#xff08;AI&#xff09;在医疗领域的应用 人工智能&#xff08;AI&#xff09;在医疗领域的应用近年来得到了广泛的关注。其中&#xff0c;AI辅助治疗疾病的技术成为了研究热点。本文将介绍AI辅助治疗疾病的技术&#xff0c;包括其定义、应用场景、案例分析和发展…