某印刷厂有 6项加工任务J1,J2,J3,J4,J5,J6,需要在两台机器Mi和M2上完
成。
在机器Mi上各任务所需时间为5,1,8,5,3,4单位;
在机器M2上各任务所需时间为7,2,2,4,7,4单位。
即时间矩阵为:
T1 = {5, 1, 8, 5, 3 ,4}
T2 = {7, 2, 2, 4, 7, 4}
请解决以下问题:
1.给出任务的最优加工顺序,使得总加工时间最短;
2.计算加工完成所有任务的最短总时间;
算法流程:
-
把ai<=bi 的放在数组list1,把ai>bi放在数组list2中
-
把list1进行从小到大排序,list2从大到小排序
-
把list1和list2进行合并,list1在前list2在后,这个顺序即为加工的顺序
java
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] A = new int[n];
for (int i = 0; i < n; i++) {
A[i] = sc.nextInt();
}
int[] B = new int[n];
for (int i = 0; i < n; i++) {
B[i] = sc.nextInt();
}
List<int[]> list1 = new ArrayList<>();
List<int[]> list2 = new ArrayList<>();
for (int i = 0; i < n; i++) {
if (A[i] <= B[i]) {
list1.add(new int[]{A[i], B[i]});
} else {
list2.add(new int[]{A[i], B[i]});
}
}
list1.sort((o1, o2) -> o1[0] - o2[0]);
list2.sort((o1, o2) -> o2[1] - o1[1]);
List<int[]> list = new ArrayList<>();
list.addAll(list1);
list.addAll(list2);
int AA = 0;
int BB = 0;
for(int[] arrs : list){
AA+=arrs[0];
BB = Math.max(AA,BB) + arrs[1];
}
System.out.println(Math.max(AA,BB));
}
list中即为最优的顺序
最终输出结果为最短时间