解题思路:
基本思路就是使用矩阵模拟出各机器的时间线,按照给定的总工件顺序,参照各工件单独的加工顺序与加工时间填写矩阵,最终输出最长的矩阵。我写的很烂,方法很笨,但是看到没人提交python代码,然后自己又懒得对代码优化,所以提交上来请各位大佬优化一下我的代码。敬礼(^^ゞ
注意事项:
参考代码:
m,n=map(int,input().split())
sq = list(map(int,input().split()))#总工序
gongxu = []#各工件所经历工序
gongshi = []#各工件在各机器所需工时
last = []#各工件当前应起始时间
for i in range(n):
gongxu.append(list(map(int,input().split())))
last.append(0)
for i in range(n):
gongshi.append(list(map(int,input().split())))
M=[]#各机器时间线矩阵
for i in range(m):
M.append([0 for i in range(100)])
for i in sq:
t=0#当前空闲时间段长度
q = 0
machine = gongxu[i - 1][q]#当前工件应使用的机器
while i in M[machine-1]:#若该机器时间线中已出现该工件,则当前机器不考虑,根据该工件工序检查下一个机器
q+=1
machine = gongxu[i - 1][q]
for j in range(last[i-1],100):#从前向后检查该机器第一个满足该工件工时的位置
if M[machine-1][j]!=0:#若非0则代表该时间点已被占用,直接进入下一个时间点
continue
w=j#若遇到零,将第一个零的位置保存下来
while M[machine-1][j]==0:#遇到连续零则将空闲时间累计到t
t+=1
if t >= gongshi[i - 1][machine-1]:#当空闲时间段满足该工件工时时退出循环
break
if t>=gongshi[i-1][machine-1]:#利用刚才存下的初始零的位置将该段时间全赋为工件编号,代表该段时间该工件占用
for k in range(gongshi[i-1][machine-1]):
M[machine-1][w+k]=i
last[i-1]=w+k+1#将该工件下次加工的最早时间更新
break
time = 0
for i in range(m):#从后向前找到占用时间段最长的机器
for j in range(99,-1,-1):
if M[i][j]==0:
continue
elif j>=time:
time=j
break
print(time+1)
0.0分
1 人评分
C语言训练-求函数值 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:366 |
模拟计算器 (C语言代码)浏览:2366 |
盐水的故事 (C语言代码)浏览:1604 |
DNA (Java代码)浏览:971 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:447 |
简单的a+b (C语言代码)浏览:363 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:2755 |
管理学院的人数 (Java代码)浏览:560 |
A+B for Input-Output Practice (VI) (C++代码)浏览:436 |