一个工厂有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)
3 9
1 1 1 2 3 4 6 7 8
import java.util.*; public class aa9 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()){ //流水线的数量 int liuNum = sc.nextInt(); //作业的数量 int zuoyeNum = sc.nextInt(); //作业的值放在数组中 int[] arr = new int[zuoyeNum]; for (int i = 0; i < zuoyeNum; i++) { arr[i] = sc.nextInt(); } //对数组进行排序 Arrays.sort(arr); //创建list,用来放置和流水线相等的作业 List<Integer> list = new ArrayList<>(); for (int i = 0; i < liuNum; i++) { list.add(arr[i]); } Collections.sort(list); //遍历作业 for (int i = liuNum; i < arr.length; i++) { int time = arr[i]+list.get(0); list.remove(list.get(0)); list.add(time); Collections.sort(list); } System.out.println(list.get(liuNum-1)); } } }