题目描述:
- 一个工厂有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
- 注:保证输入都是合法的。
输出描述:
- 输出处理完所有作业的总时长
代码:
def main(args: Array[String]): Unit = {
// 获取输入
val MN = StdIn.readLine().split(" ").map(_.toInt)
val m = MN(0)
val n = MN(1)
val NTime = StdIn.readLine().split(" ").map(_.toInt).toList.sorted
println(NTime)
// 当 n <= m 时
if (n <= m) {
println(NTime(NTime.length - 1))
return
}
// 当 n > m 时
var res = new ListBuffer[Int]
// 处理第一批
for (i <- 0 until m) {
res += NTime(i)
}
// 处理剩下批次,一次替换最小值
for (i <- m until NTime.length) {
val resTmp = res.sorted
res(0) = NTime(i) + resTmp(0)
}
// 输出结果
println(res.max)
}
❤️ END ❤️