def knapsack_recursive(capacity, weights, values, n, current_weight, current_value, selected_items, result):
if n == 0:
result['value'] = max(result['value'], current_value)
result['items'] = list(selected_items)
return
if current_weight + weights[n - 1] <= capacity:
selected_items.append(n - 1)
knapsack_recursive(capacity, weights, values, n - 1,
current_weight + weights[n - 1],
current_value + values[n - 1],
selected_items, result)
selected_items.pop()
knapsack_recursive(capacity, weights, values, n - 1,
current_weight, current_value,
selected_items, result)
def knapsack_solver(capacity, weights, values):
result = {'value': 0, 'items': []}
knapsack_recursive(capacity, weights, values, len(weights), 0, 0, [], result)
return result
weights = [4, 3, 1]
values = [3000, 2000, 1500]
capacity = 4
result = knapsack_solver(capacity, weights, values)
print("Max value:", result['value'])
print("Selected items:", [f"Item {i + 1}" for i in result['items']])