Cizz22 3 months ago
parent d52b43fcf3
commit 110d7cc7ee

@ -150,7 +150,7 @@ def knapsack_selection(equipments: List[dict], budget: float, scale: int = 10_00
for i in range(n): for i in range(n):
cost, value = costs[i], values[i] cost, value = costs[i], values[i]
for w in range(W, cost - 1, -1): for w in range(W, cost - 1, -1):
if dp[w - cost] + value > dp[w]: if dp[w - cost] + value >= dp[w]: # <= FIXED HERE
dp[w] = dp[w - cost] + value dp[w] = dp[w - cost] + value
keep[i][w] = True keep[i][w] = True
@ -164,5 +164,15 @@ def knapsack_selection(equipments: List[dict], budget: float, scale: int = 10_00
else: else:
excluded.append(equipments[i]) excluded.append(equipments[i])
# Optional: fill leftover budget with zero-priority items
remaining_budget = budget - sum(eq["total_cost"] for eq in selected)
if remaining_budget > 0:
for eq in excluded[:]:
if eq["total_cost"] <= remaining_budget:
selected.append(eq)
excluded.remove(eq)
remaining_budget -= eq["total_cost"]
return selected, excluded return selected, excluded
Loading…
Cancel
Save