29.工厂流水线最短时间优先调度算法问题

一个工厂有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
13

 

查看代码

import java.util.*;

public class Demo29 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String[] split = sc.nextLine().split(" ");
        int m = Integer.parseInt(split[0]);
        int n = Integer.parseInt(split[1]);

        String[] times = sc.nextLine().split(" ");
        int[] ints = new int[n];
        for(int i = 0; i < n; i++){
            ints[i] = Integer.parseInt(times[i]);
        }
        Arrays.sort(ints);

        int[] res = new int[m];
        for(int i = 0; i < n; i++){
            res[i % m] += ints[i];
        }
        Arrays.sort(res);
        System.out.println(res[m - 1]);
    }
}

总结:两种语言表达方式的转换,慢慢积累,加油。

          按照人的常规思维处理,在计算机看来是没必要的,重要的是思维方式的转换。

posted @ 2022-03-26 22:51  Jukim  阅读(1858)  评论(0编辑  收藏  举报