最新华为OD机试
】2025华为od 机试2025B卷-华为机考OD2025年B卷
题目描述
一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。
现给定流水线个数m,需要完成的作业数n, 每个作业的处理时间分别为t1,t2…tn。请你编程计算处理完所有作业的耗时为多少?
当n>m时,首先处理时间短的m个作业进入流水线,其他的等待,当某个作业完成时,依次从剩余作业中取处理时间最短的进入处理。
输入描述
第一行为2个整数(采用空格分隔),分别表示流水线个数m和作业数n;
第二行输入n个整数(采用空格分隔),表示每个作业的处理时长t1,t2…tn。
0< m,n<100,0<t1,t2…tn<100。
注:保证输入都是合法的。
输出描述
输出处理完所有作业的总时长。
示例1
输入
3 5
8 4 3 2 10
输出
13
说明
1、先安排时间为2、3、4的3个作业。
2、第一条流水线先完成作业,然后调度剩余时间最短的作业8。
3、第二条流水线完成作业,然后调度剩余时间最短的作业10。
4、总工耗时就是第二条流水线完成作业的时间13(3+10)。
解题思路
作业分配:
-
如果作业数
n
小于等于流水线数m
,则每个作业直接分配给一条流水线,处理完的总时间就是所有作业的处理时间。 -
如果作业数
n
大于流水线数m
,则优先将处理时间最短的m
个作业分配给各条流水线。 -
对于剩下的作业,依次从处理时间最短的作业中选择,并将其分配到当前处理时间最短的流水线上。每分配一个作业,就将该流水线的总时间更新。
以示例输入为例,3条流水线,5个作业,处理时间为 [8, 4, 3, 2, 10]:
- 排序后的作业时间:[2, 3, 4, 8, 10]
- 分配前3个作业给流水线:
- 流水线1:处理时间 2
- 流水线2:处理时间 3
- 流水线3:处理时间 4
- 作业完成情况:
- 流