#7测试点Python
查看原帖
#7测试点Python
373576
a409639384楼主2020/8/29 20:12

#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))

2020/8/29 20:12
加载中...