import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Vector;
public class JobScheduling2 {
static class Job implements Comparator<Job>{
int id;
double needTime;
public Job(){
}
public Job(int id, double needTime){
this.id = id;
this.needTime = needTime;
}
@Override
public int compare(Job o1, Job o2) {
return (o1.needTime > o2.needTime)?-1:1;
}
public String toString(){
return ""+needTime;
}
}
static class Machine implements Comparator<Machine>{
int id;
double runningTime;
Vector<Job> taskList;
public Machine(int id, double runningTime){
this.id = id;
this.runningTime = runningTime;
this.taskList = new Vector<Job>();
}
public Machine(){this.taskList = new Vector<Job>();}
@Override
public int compare(Machine o1, Machine o2) {
return o1.runningTime>o2.runningTime?1:-1;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n; //作业个数
int m; //机器数
while(scan.hasNext()){
n = scan.nextInt();
m = scan.nextInt();
Vector<Job> jobs = new Vector<>();
for(int i=0; i<n; i++){
jobs.add(new Job(i+1, scan.nextDouble()));
}
Collections.sort(jobs, new Job());
// for(int i=0; i<n; i++){
// System.out.print(jobs.get(i).needTime + " ");
// }
PriorityQueue<Machine> pqMachine = new PriorityQueue<Machine>(new Machine());
for(int i=0; i<m; i++){
pqMachine.add(new Machine(i+1, 0));
}
for(int i=0; i<n; i++){
Machine machine = pqMachine.poll();
machine.runningTime += jobs.get(i).needTime;
machine.taskList.add(jobs.get(i));
pqMachine.add(machine);
}
while(pqMachine.size()>0){
Machine machine = pqMachine.poll();
System.out.print("第" + machine.id + "台机器工作时间是:" + machine.runningTime);
System.out.print(" 这些任务(任务所需时间)工作在这台机器上:");
for(int j=0; j<machine.taskList.size(); j++){
System.out.print(machine.taskList.get(j).needTime + " ");
}
System.out.println();
}
}
}
}
作业调度问题
最新推荐文章于 2023-12-11 04:00:00 发布