JobSequencing
Wed Nov 06 2024 16:36:28 GMT+0000 (Coordinated Universal Time)
Saved by @signin
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class Job {
int id; // Job ID
int profit; // Profit if job is completed
int deadline; // Deadline by which job should be completed
Job(int id, int profit, int deadline) {
this.id = id;
this.profit = profit;
this.deadline = deadline;
}
}
public class JobSequencing {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Input the number of jobs
System.out.print("Enter the number of jobs: ");
int n = scanner.nextInt();
Job[] jobs = new Job[n];
// Input each job's ID, profit, and deadline
for (int i = 0; i < n; i++) {
System.out.print("Enter job ID, profit, and deadline for job " + (i + 1) + ": ");
int id = scanner.nextInt();
int profit = scanner.nextInt();
int deadline = scanner.nextInt();
jobs[i] = new Job(id, profit, deadline);
}
// Calculate the maximum profit and print the job sequence
int totalProfit = jobSequencing(jobs, n);
System.out.println("Total Profit: " + totalProfit);
scanner.close();
}
public static int jobSequencing(Job[] jobs, int n) {
// Sort jobs by profit in descending order
Arrays.sort(jobs, Comparator.comparingInt((Job job) -> job.profit).reversed());
// Find the maximum deadline to create the job schedule array
int maxDeadline = 0;
for (Job job : jobs) {
maxDeadline = Math.max(maxDeadline, job.deadline);
}
// Array to keep track of the free time slots
int[] result = new int[maxDeadline + 1]; // 1-based index
Arrays.fill(result, -1); // Initialize all time slots to -1 (indicating free)
int totalProfit = 0;
System.out.println("\nSelected Jobs:");
System.out.println("Job ID | Profit | Deadline");
// Iterate over each job
for (Job job : jobs) {
// Find a free time slot for this job (latest possible slot before deadline)
for (int j = job.deadline; j > 0; j--) {
if (result[j] == -1) { // If slot j is free
result[j] = job.id; // Assign job to this slot
totalProfit += job.profit;
System.out.println(" " + job.id + " | " + job.profit + " | " + job.deadline);
break;
}
}
}
return totalProfit;
}
}



Comments