解题思路:
基本思路就是使用矩阵模拟出各机器的时间线,按照给定的总工件顺序,参照各工件单独的加工顺序与加工时间填写矩阵,最终输出最长的矩阵。我写的很烂,方法很笨,但是看到没人提交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 人评分
2004年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:663 |
printf基础练习2 (C语言代码)浏览:768 |
众数问题 (C语言代码)浏览:3515 |
母牛的故事 (C语言代码)浏览:671 |
【出圈】 (C语言代码)浏览:796 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:377 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:745 |
printf基础练习2 (C语言代码)浏览:748 |
母牛的故事 (C语言代码)浏览:551 |
1017题解浏览:605 |