def knapsack_greedy(weights, values, capacity):
n = len(weights)
items = [(values[i] / weights[i], weights[i], values[i]) for i in range(n)]
#Sortby value-to-weight ra o in descending order
items.sort(reverse=True, key=lambda x: x[0])
total_value = 0
knapsack = []
for ra o, weight, value in items:
if capacity >= weight:
knapsack.append((weight, value))
total_value += value
capacity -= weight
else:
frac on = capacity / weight
knapsack.append((weight * frac on, value * frac on))
total_value += value * frac on
break
return total_value, knapsack
n = int(input("Enter number of items: "))
weights = []
values = []
for i in range(n):
weight = float(input(f"Enter weight of item {i + 1}: "))
value = float(input(f"Enter value of item {i + 1}: "))
weights.append(weight)
values.append(value)
capacity = float(input("Enter knapsack capacity: "))
total_value, knapsack = knapsack_greedy(weights, values, capacity)
print(f"\nMaximum value possible: {total_value}")
print("Items taken (weight, value):")
for weight, value in knapsack:
print(f"({weight:.2f}, {value:.2f})")
Output: