OD-流水线(python)

题目描述

一个工厂有m条流水线
来并行完成n个独立的作业
该工厂设置了一个调度系统
在安排作业时,总是优先执行处理时间最短的作业
现给定流水线个数m
需要完成的作业数n
每个作业的处理时间分别为 t1,t2...tn
请你编程计算处理完所有作业的耗时为多少
n > m时 首先处理时间短的m个作业进入流水线
其他的等待
当某个作业完成时,
依次从剩余作业中取处理时间最短的
进入处理

输入描述

第一行为两个整数(采取空格分隔)
分别表示流水线个数m和作业数n
第二行输入n个整数(采取空格分隔)
表示每个作业的处理时长 t1,t2...tn
0 < m, n< 100
0 < t1,t2...tn < 100

输出描述

输出处理完所有作业的总时长

示例一

输入

3 5
8 4 3 2 10

输出

13

说明

先安排时间为2,3,4的三个作业
第一条流水线先完成作业
调度剩余时间最短的作业8
第二条流水线完成作业
调度剩余时间最短的作业10
总共耗时 就是二条流水线完成作业时间13(3+10)

代码上

# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/30
Time: 21:52
Author: kang
enp:
3 5
8 4 3 2 10
"""
m, n = map(int, input().split())
num = list(map(int, input().split()))
dp = [0] * m
num.sort()
#print(dp)
if m >= n:
    print(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]

print(max(dp))

代码解读

  1. 第 1 行从标准输入中读入两个数字 m 和 n,使用 map() 函数将其转换为整数并分别赋值给变量 m 和 n。
  2. 第 2 行从标准输入中读入一行数字,使用 map() 函数将其转换为整数并保存到一个列表 num 中。
  3. 第 3 行创建一个长度为 m 的全零列表 dp。
  4. 第 4 行将 num 列表进行升序排序。
  5. 第 5 行输出 dp 列表的值,用于调试程序。
  6. 第 6~8 行判断如果 m 大于等于 n,则直接输出 num 列表中的最大值,并返回。
  7. 第 9~13 行循环 n 次,每次取出 num 列表中的 m 个数字,保存到列表 lis 中。然后对于列表 lis 中的每个数字,将其加到 dp 列表中对应的位置上。
  8. 第 14 行使用 max() 函数取出 dp 列表中的最大值,并将结果赋值给变量 max_dp。
  9. 第 15 行输出 max_dp 变量的值,作为最终的结果。

 

你可能感兴趣的:(python,算法)