sad


私信TA

用户名:dotcpp0636157

访问量:614

签 名:

等  级
排  名 2303
经  验 2292
参赛次数 0
文章发表 13
年  龄 0
在职情况 学生
学  校 asd
专  业

  自我简介:

TA的其他文章

取石子游戏
浏览:51
字符排列问题
浏览:18
年会题解解解
浏览:32

解题思路:
基本思路就是使用矩阵模拟出各机器的时间线,按照给定的总工件顺序,参照各工件单独的加工顺序与加工时间填写矩阵,最终输出最长的矩阵。我写的很烂,方法很笨,但是看到没人提交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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区