#7这个测试点的答案是116,但是我搞出来的112 是哪里出了什么问题吗,求大神解答!以下是我的代码
m,n=map(int,input().split())
#初始化-------------
#生成机器序列
ms=[]
for i in range(m+1):
ms.append([])
#获取顺序信息
order=list(map(int,input().split()))
#获取工序机器号
take_ms=[[]]
for i in range(n):
take_ms.append(list(map(int,input().split())))
#获取工序时间
take_times=[[]]
for i in range(n):
take_times.append(list(map(int,input().split())))
#处理次数记录
process=[]
#工件最小插入位置记录
pos=[0 for i in range(n+1)]
#处理过程------------
record=1
for i in order:
#1获取操作信息
step=process.count(i)
take_m=take_ms[i][step]
take_time=take_times[i][step]
min_pos=pos[i]
#2安排工件位置
#若机器为空或最小插入位置之前有空位
#最小插入位置之前补0,插入位置之后补时间长度的工件号
if ms[take_m]==[] or len(ms[take_m])<=min_pos:
for j in range(len(ms[take_m]),min_pos):
ms[take_m].append(0)
for j in range(take_time):
ms[take_m].append(i)
min_pos=len(ms[take_m])
#若最小插入位置小于机器最终工作位置,判断是否可以插空
else:
end=len(ms[take_m])
libre=0
start=min_pos
while True:
if start==end:
libre=0
break
if ms[take_m][start]==0:
if libre==0:
min_pos=start
libre+=1
else:
libre=0
#可以插入
if libre==take_time:
for j in range(take_time):
if record==66:
print(j,min_pos)
ms[take_m][min_pos]=i
min_pos+=1
#min_pos+=1
break
start+=1
#不可插入
if libre==0:
for j in range(take_time):
ms[take_m].append(i)
min_pos=len(ms[take_m])
#下一轮初始化
process.append(i)
pos[i]=min_pos
record+=1
total_times=[]
for i in range(1,m+1):
total_times.append(len(ms[i]))
print(max(total_times))