# Fractional Knapsack using Greedy Method class Item: def __init__(self, value, weight): self.value = value self.weight = weight def fractional_knapsack(items, capacity): # Step 1: Sort items by value/weight ratio (descending) items.sort(key=lambda x: x.value / x.weight, reverse=True) total_value = 0.0 # total value in knapsack remaining_capacity = capacity # Step 2: Pick items greedily for item in items: if remaining_capacity >= item.weight: # take full item total_value += item.value remaining_capacity -= item.weight else: # take fractional part fraction = remaining_capacity / item.weight total_value += item.value * fraction break # knapsack is full return total_value # Example usage if __name__ == "__main__": values = [60, 100, 120] weights = [10, 20, 30] capacity = 50 items = [Item(v, w) for v, w in zip(values, weights)] max_value = fractional_knapsack(items, capacity) print("Maximum value in Knapsack =", max_value)