【作业调度方案】

作业调度方案 我们现在要利用 m 台机器加工 n 个工件,每个工件都有 m 道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中 j 为 1 到 n 中的某个数字,为工件号;k 为 1 到 m 中的某个数字,为工序号,例如2-4表示第 2 个工件第 4 道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。例如,当 n=3,m=2 时, 阅读详情

题目链接:http://115.28.203.224/problem.php?cid=1011&pid=1

题目描述

我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。
每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。
例如,当n=3,m=2时,“1-1,1-2,2-1,3-1,3-2,2-2”就是一个给定的安排顺序,即先安排第1个工件的第1个工序,再安排第1个工件的第2个工序,然后再安排第2个工件的第1个工序,等等。
一方面,每个操作的安排都要满足以下的两个约束条件。
(1) 对同一个工件,每道工序必须在它前面的工序完成后才能开始;
(2) 同一时刻每一台机器至多只能加工一个工件。
另一方面,在安排后面的操作时,不能改动前面已安排的操作的工作状态。
由于同一工件都是按工序的顺序安排的,因此,只按原顺序给出工件号,仍可得到同样的安排顺序,于是,在输入数据中,我们将这个安排顺序简写为“1 1 2 3 3 2”。
还要注意,“安排顺序”只要求按照给定的顺序安排每个操作。不一定是各机器上的实际操作顺序。在具体实施时,有可能排在后面的某个操作比前面的某个操作先完成。
例如,取n=3,m=2,已知数据如下:
则对于安排顺序“1 1 2 3 3 2”,下图中的两个实施方案都是正确的。但所需要的总时间分别是10与12。
当一个操作插入到某台机器的某个空档时(机器上最后的尚未安排操作的部分也可以看作一个空档),可以靠前插入,也可以靠后或居中插入。为了使问题 简单一些,我们约定:在保证约束条件(1)(2)的条件下,尽量靠前插入。并且,我们还约定,如果有多个空档可以插入,就在保证约束条件(1)(2)的条 件下,插入到最前面的一个空档。于是,在这些约定下,上例中的方案一是正确的,而方案二是不正确的。
显然,在这些约定下,对于给定的安排顺序,符合该安排顺序的实施方案是唯一的,请你计算出该方案完成全部任务所需的总时间。

输入

第1行为两个正整数,用一个空格隔开:
m n
(其中m(〈20)表示机器数,n(〈20)表示工件数)
第2行: 2n个用空格隔开的数,为给定的安排顺序。
接下来的2n行,每行都是用空格隔开的m个正整数,每个数不超过20。
其中前n行依次表示每个工件的每个工序所使用的机器号,第1个数为第1个工序的机器号,第2个数为第2个工序机器号,等等。
后n行依次表示每个工件的每个工序的加工时间。
可以保证,以上各数据都是正确的,不必检验。

输出

只有一个正整数,为最少的加工时间。

样例输入

2 3
1 1 2 3 3 2
1 2
1 2
2 1
3 2
2 5
2 4

样例输出

10

参考解法

http://www.cnblogs.com/yylogo/archive/2011/06/27/TYVJ-1058.html

代码

#include <stdio.h>
#include <stdlib.h>
int num[361];
int machine[19][362];
int used[19], order[19][19];
int last[19];
int time[19][19];
int max[19];

int main(int argc, char **argv) {
	int i, j, k, l;
	int m, n, count;
	int ans = 0;
	scanf("%d%d", &m, &n);
	for(i = 0; i < m * n; i++) {
		scanf("%d", &num[i]);
		num[i]--;
	}
	for(i = 0; i < n; i++) {
		for(j = 0; j < m; j++) {
			scanf("%d", &order[i][j]);
			order[i][j]--;
		}
	}
	for(i = 0; i < n; i++) {
		for(j = 0; j < m; j++) {
			scanf("%d", &time[i][j]);
		}
	}
	for(i = 0; i < m * n; i++) {
		k = order[num[i]][used[num[i]]];
		count = 0;
		for(j = last[num[i]]; count < time[num[i]][used[num[i]]]; j++) {
			if(machine[k][j] == 0) {
				count++;
			} else {
				count = 0;
			}
		}
		for(l = 1; l <= count; l++) {
			machine[k][j - l] = 1;
		}
		last[num[i]] = j;
		used[num[i]]++;
		if(max[k] < j) {
			max[k] = j;
		}
	}
	for(i = 0; i < m; i++) {
		if(ans < max[i]) {
			ans = max[i];
		}
	}
	printf("%d\n", ans);
	return 0;
}
西南科技大学OJ题答案 西南科技大学OJ题答案西南科技大学OJ题答案西南科技大学OJ题答案西南科技大学OJ题答案西南科技大学OJ题答案 立即下载

相关推荐

记录:N10激光雷达串口编程,将数据存进 SQLite,并进行 ROS2 - cartographer 单雷达建图

N10 系列采用 TOF(time of flight)测距原理,通过测量调制激光的发射、返回时间差来测量物体与传感器的相对距离。激光发射器发出调制脉冲激光,内部定时器开始 从t1时刻计算时间,当激光照射到目标物体后,部分能量返回,当雷达接收到返回的激光信号时,在t2时刻停止内部定时器计时,光速C,激光雷达到达物体的距离D为:经过N10系列激光雷达内嵌的信号处理单元的实时解算得到探测物体的距离值,结合高精度自适应角度测量模块输出的角度信息,可以得到量程内周围 360 度环境 的二维平面信息。

m0_74013893的博客 1096

P1065 作业调度方案 【模拟】

题目描述 我们现在要利用mmm台机器加工nnn个工件,每个工件都有mmm道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中jjj为111到nnn中的某个数字,为工件号;kkk为111到mmm中的某个数字,为工序号,例如2-4表示第222个工件第444道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。 例如,当n=3n=3n=3,m=2m=2m=2时,1-1,1-2,2-1,3-1,3-2,2-2

ln2037的博客 697

域控制器开发避坑实录:从硬件设计到软件集成的5个关键挑战

本文深入剖析了域控制器开发中的5大关键挑战,从硬件选型到软件集成,涵盖智能驾驶芯片选择、实时性优化、AUTOSAR架构适配等核心问题。通过实战案例和数据对比,为工程师提供避坑指南,助力提升开发效率和系统可靠性。

weixin_29258297的博客 395

TYVJ 1058 作业调度方案 完整版 解题报告

  这题网上的各个题库都不完整,完整的我发一次: 题目的原描述如下,rqnoj和vijos的题目都不完全,少了一幅图片,表格也不清晰。。 【问题描述】 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为...

aiechu6301的博客 716

无限维李代数局部与2-局部1/2-导子:从概念到Witt代数实例解析

在抽象代数与数学物理中,李代数是描述对称性的基本结构,而导子则是刻画其微分性质的核心算子。从经典的导子概念出发,通过引入“局部”与“分数阶”两个关键推广,形成了局部导子、2-局部导子以及1/2-导子等重要研究方向。这些推广不仅深化了对无限维李代数(如Witt代数、Virasoro代数)复杂结构的理解,其研究方法和结论也为共形场论、可积系统等物理理论提供了数学基础。本文聚焦于无限维李代数上局部与2-局部1/2-导子的系统研究,通过拆解核心概念、剖析典型代数结构,并以Witt代数为实例,详细演示了从全局1/2-

weixin_34072296的博客 392

GPU运维面试题

【代码】GPU运维面试题。

u011220233的博客 696

新年综合礼物DAY1

T1: 题目描述 我们现在要利用mm台机器加工nn个工件,每个工件都有mm道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作,我们用记号j-kj−k表示一个操作,其中jj为11到nn中的某个数字,为工件号;kk为11到mm中的某个数字,为工序号,例如2-42−4表示第22个工件第44道工序的这个操作。在本题中,我们还给定对于各操...

PUBG___的博客 413

SQL面试题——抖音SQL面试题 股票波峰波谷

这个题目的难度比较低,我们是用lead 和 lag 两个函数就可以搞定,也就是在一个SQL 里面同时使用多个函数,问题的考查点在于对边界的考虑。

2万+

【系统分析师】高分论文:论基于构件的软件开发(气象灾害影响评估系统)

本文以某手机气象灾害影响评估系统为例,探讨了基于构件技术的软件开发实践。通过分析开发中常见的功能模块重复问题,提出建立企业构件库、针对性选择构件和加强构件管理的解决方案。项目实施中成功复用登录模块等通用构件,并针对气象数据转换需求开发新构件,最终在8个月内高质量完成系统建设。文章总结了构件开发的三个关键点:构件库建设是基础、构件选择需精准、构件管理要规范。同时指出需注意全新需求开发、性能优化等问题,建议通过培训提升团队对构件的理解力。该案例证明构件技术能有效缩短周期、降低成本,为企业积累可复用的技术资产。

数据知道的博客 4253

TIA西门子博途V19安装教程及注意事项

TIA西门子博途V19安装教程及注意事项

Robot_PLC_HMI_Automation 1万+

作业调度方案题解

这是一道很显然的模拟题 就是里面有些操作有点繁杂 代码(具体讲解): //nma[i][j](need machine):第i个零件第j个工序使用的机器; //tim[i][j](time):第i个零件第j个工序所需的时间; //st[i][j](state):第j分钟第i个机器的状态,0表示空闲,1表示不空闲; //ord[](order):给定的安排顺序; //nnu[i](no...

yjc115的博客 958

uniapp - 解决uni.getLocation定位不准有偏差,定位经纬度不准确有几百米误差、获取地图定位有偏差怎么办,已配置高精确度但依旧不精准(uni.getLocation定位不准如何解决)

uni.getLocation,获取当前的地理位置、速度。已经设置altitude高精度,uniapp API获取定位有差异问题解决,获取定位有几百米偏差,uni.getLocation(OBJECT)中使用默认type ”wgs84“会导致定位不准的问题,gcj02,uni.getLocation地图定位不准,获取经纬度错误偏移了几十公里,经纬度的精确度误差,怎么消除经纬度偏差,解决 uniapp uni.getLocation 定位经纬度不准问题,使用定位不准,定位不准误差问题,解决定位不准问题,高德地

✅ 精选推荐文章 1万+

【题解】作业调度方案

题目 题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。 例如,当n=3,m=2时,“1-1,1-2,2-1,3-1,3-2,2-2”就是一个给定的安排顺序,即先安排第1个工件的第1个工序,再

tanfuwen_的博客 2538

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ZZULIOJ1202: 作业调度方案

zzulioj1202:作业调度方案 题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安...

eexiaobai的博客 984

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

P1065 [NOIP 2006 提高组] 作业调度方案 详解

第二行是对于工序的排列顺序,对于第一个原件,先在第一个工序做完,之后再在第二个工序做,对应 1 1 , 之后对于第二个工件先做第一道工序,再对于第三个工件,先在第一个工序做,再在第二个工序做,之后最后对于第二个工件在第二个工序上做 对应 2 3 3 2。之后输入的数据接收完毕,该做啥,是不是就应该for循环遍历每道工序,为什么遍历每道工序,因为你要思考,大模拟,大模拟,我是不是要模仿此时工厂的运行,他是对于每个工件的每道工序都有安排,而对于每个原件 有 m个工序,所有总共有 n*m个工序。

2501_90651890的博客 1248

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

洛谷P1065 [NOIP 2006 提高组] 作业调度方案

我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。例如,当n3m2时,就是一个给定的安排顺序,即先安排第1个工件的第1个工序,再安排第1个工件的第2。

tonman7797的博客 789

P1065 [NOIP2006 提高组] 作业调度方案【模拟】

我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。例如,当n3m2时,就是一个给定的安排顺序,即先安排第1个工件的第1个工序,再安排第1个工件的第2。

海岛Blog 1402

P1065 作业调度方案

这道题目要求根据给定的工序顺序,在满足工件工序顺序和机器独占约束的条件下,计算出完成所有工序所需的最短时间。每个工件有m道工序,每道工序需要在指定机器上完成。解题时需要依次处理给定的工序顺序,为每个工序在对应机器上找到最早可插入的时间段,同时保证同一工件的工序顺序和机器独占性。最终输出所有工序完成的最晚时间。 关键点: 按给定顺序处理每个工序 确保同一工件的工序顺序 确保机器同一时间只处理一个工序 为工序选择最早可插入的时间段 示例输入输出展示了两种可能的调度方案,其中用时10的方案是正确的。算法通过遍历机

2301_80684112的博客 805

JobSchedulerCompat:跨版本的作业调度解决方案

JobSchedulerCompat:跨版本的作业调度解决方案 JobSchedulerCompat 是一个开源项目,旨在为 Android 开发者提供一个可以在低版本 API 上使用 JobScheduler 功能的库。该项目主要使用 Java 语言进行开发。 项目基础介绍 JobSchedulerCompat 是一个 Android 库,它允许开发者使用 JobScheduler、GCMNet...

gitblog_01186的博客 503

[NOIP2006 提高组] 作业调度方案

[NOIP2006 提高组] 作业调度方案

weixin_63021621的博客 713

NOIP2006 作业调度方案

1.             作业调度方案 (jsp.pas/c/cpp) 【问题描述】 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序

hahalidaxin的专栏 695

[专利的技术解说]关于分组互斥的作业调度方案

现有的作业调度机制中在复杂的作业调度系统中,存在多种互斥不能并发的情况,比如,作业A每天的作业流程按日期顺序执行,作业B每天按日期顺序执行,但是作业A、作业B会有时等待多天的上游数据直到某天一下执行处理多天的数据,比如月初第三天一下子到达上月末和本月初的各天数据,又有可能作业A和作业B同时处理某一张表的数据或者同一张表同一分区的数据,这样就有可能资源死锁。 所以,我们可以对作业进行互斥级别分别定义、互斥各级划分后再划分互斥组。 这和我们以前课本学习的进程组,资源调度又有很多不一样的地方。这个要仔细品味。

Wynne文越的专栏 397
上一篇: 【亲和数】
下一篇: 【偶数求和】
Graph86
博客等级 码龄11年 201粉丝 201原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值