一個工廠有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]);
}
}
總結:兩種語言表達方式的轉換,慢慢積累,加油。
按照人的常規思維處理,在計算機看來是沒必要的,重要的是思維方式的轉換。