解题思路:
基本思路就是使用矩阵模拟出各机器的时间线,按照给定的总工件顺序,参照各工件单独的加工顺序与加工时间填写矩阵,最终输出最长的矩阵。我写的很烂,方法很笨,但是看到没人提交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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复