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