using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static ProjectKnapsack.classes.KnapsackParameters; namespace ProjectKnapsack.classes; public class KnapsackSolver { private List items; private int capacity; private double currentWeight; private double currentValue; private int currentIndex; public KnapsackSolver(KnapsackParameters parameters) { items = parameters.Items.OrderByDescending(i => i.Value / i.Weight).ToList(); capacity = parameters.Capacity; currentWeight = 0; currentValue = 0; currentIndex = 0; } public KnapsackState SaveState() { return new KnapsackState(items, currentWeight, currentValue, currentIndex,capacity); } public void RestoreState(KnapsackState state) { items = new List(state.Items); currentWeight = state.CurrentWeight; currentValue = state.CurrentValue; currentIndex = state.CurrentIndex; } public bool Step() { if (currentIndex >= items.Count) return false; Item item = items[currentIndex]; if (currentWeight + item.Weight <= capacity) { currentWeight += item.Weight; currentValue += item.Value; } currentIndex++; return true; } }