KnapSack1
Thu Nov 07 2024 01:11:46 GMT+0000 (Coordinated Universal Time)
Saved by @login123
import java.util.*;
public class Knapsack {
public static double greedyKnapSack(ItemValue[] items, int capacity) {
Arrays.sort(items, (a, b) -> Double.compare((double) b.profit / b.weight, (double) a.profit / a.weight));
double totalProfit = 0;
for (ItemValue item : items) {
if (capacity >= item.weight) {
capacity -= item.weight;
totalProfit += item.profit;
} else {
totalProfit += (double) capacity / item.weight * item.profit;
break;
}
}
return totalProfit;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter number of items: ");
int n = sc.nextInt();
ItemValue[] items = new ItemValue[n];
System.out.println("Enter weight and profit of each item:");
for (int i = 0; i < n; i++) {
items[i] = new ItemValue(sc.nextInt(), sc.nextInt());
}
System.out.print("Enter capacity: ");
int capacity = sc.nextInt();
System.out.println("Maximum profit: " + greedyKnapSack(items, capacity));
sc.close();
}
}
class ItemValue {
int weight, profit;
ItemValue(int weight, int profit) {
this.weight = weight;
this.profit = profit;
}
}
function greedyKnapSack(items, n, W):
sort items in descending order of (profit/weight)
totalProfit = 0
remainingCapacity = W
for each item in items:
if remainingCapacity >= item's weight:
totalProfit += item's profit
remainingCapacity -= item's weight
else:
fraction = remainingCapacity / item's weight
totalProfit += fraction * item's profit
break
return totalProfit
Procedure GREEDY_KNAPSACK (P, W, M, X, n):
and contain the profits and weights respectively of the objects arranged so that .
is the knapsack size, and is the solution vector.
real P(1:n), W(1:n), X(1:n), M, cu;
integer i, n;
X ← 0 // Initialize solution to zero
cu ← M // cu = remaining knapsack capacity
for i ← 1 to n do
if W(i) > cu then exit endif
X(i) ← 1
cu ← cu - W(i)
repeat
if i ≤ n then X(i) ← cu/W(i) endif
end GREEDY_KNAPSACK
OUTPUT:
Enter the number of items:
3
Enter weight, profit of each item:
10 60
20 100
30 120
Enter capacity:
50
Maximum profit: 240.0



Comments