流水线python

通用一般算法

OD-流水线(python)

def total_time(m,n,num):
    dp = [0] * m
    num.sort()
    #print(dp)
    if m >= n:
        return max(num)
    else:
        for i in range(0, n, m):
            #print(num[i:i + m])
            lis = num[i:i + m]
            for j in range(len(lis)):
                dp[j] += lis[j]
        return max(dp)

创新算法

idea

对所有工作按耗时排序之后,流水线工作时间由最后一个任务,即耗时最长的任务决定。而排序之后的任务组合加入流水线的方式由流水线个数m和需要完成的作业数n即可确定。

代码实现

def total_time0(m,n,num):
    num.sort()
    t=[num[i] for i in range(n-1,0,-m)]
    return sum(t)

对比验证

import random
def total_time(m,n,num):
    dp = [0] * m
    num.sort()
    #print(dp)
    if m >= n:
        return max(num)
    else:
        for i in range(0, n, m):
            #print(num[i:i + m])
            lis = num[i:i + m]
            for j in range(len(lis)):
                dp[j] += lis[j]
        return max(dp)

def total_time0(m,n,num):
    num.sort()
    t=[num[i] for i in range(n-1,0,-m)]
    return sum(t)

if __name__=='__main__':
    
    '''m, n = map(int, input().split())
    num = list(map(int, input().split()))'''
    m,n = int(random.randint(1,99)),int(random.randint(1,99))
    num = [random.randint(0,99) for i in range(0,n)]
    #print(m,n,'\n',num)
    print(total_time(m,n,num))
    print(total_time0(m,n,num))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>