import java.util.*; public class Code_A3 { // Main public class must match filename static class Item { int value, weight; double ratio; Item(int value, int weight) { this.value = value; this.weight = weight; this.ratio = (double) value / weight; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); List items = new ArrayList<>(); int choice; while (true) { System.out.println("\n=== Fractional Knapsack Menu ==="); System.out.println("1. Enter items"); System.out.println("2. Solve fractional knapsack"); System.out.println("3. Exit"); System.out.print("Enter your choice: "); choice = sc.nextInt(); switch (choice) { case 1: items.clear(); System.out.print("Enter number of items: "); int n = sc.nextInt(); for (int i = 0; i < n; i++) { System.out.print("Item " + (i + 1) + " value: "); int v = sc.nextInt(); System.out.print("Item " + (i + 1) + " weight: "); int w = sc.nextInt(); items.add(new Item(v, w)); } break; case 2: if (items.isEmpty()) { System.out.println("Please enter items first!"); break; } System.out.print("Enter knapsack capacity: "); int capacity = sc.nextInt(); // Sort by value-to-weight ratio items.sort((a, b) -> Double.compare(b.ratio, a.ratio)); double totalValue = 0; int remaining = capacity; System.out.println("\nItems taken (value/weight fraction):"); for (Item item : items) { if (remaining == 0) break; if (item.weight <= remaining) { System.out.println(item.value + "/" + item.weight + " -> Full"); totalValue += item.value; remaining -= item.weight; } else { double fraction = (double) remaining / item.weight; System.out.println(item.value + "/" + item.weight + " -> " + (fraction * 100) + "%"); totalValue += item.value * fraction; remaining = 0; } } System.out.printf("Maximum total value in knapsack: %.2f\n", totalValue); break; case 3: System.out.println("Exiting program. Goodbye!"); sc.close(); return; default: System.out.println("Invalid choice!"); } } } }