public override (ResultDto, long) Compute(DefinitionDto definition) { var searchSpace = new RemainderDto[definition.Capacity + 1, definition.Items.Count + 1]; var counter = 0L; return(ComputeResultRecursively(definition, new List <bool>(), 0, 0, searchSpace, ref counter), counter); }
private static void CacheRemainder(List <bool> result, long weight, long price, RemainderDto[,] searchSpace, ResultDto resultWith) { var newRemainder = new RemainderDto(resultWith.Items.Skip(result.Count).ToList(), resultWith.Price - price); searchSpace[weight, result.Count] = (searchSpace[weight, result.Count]?.Price ?? -1) < newRemainder.Price ? newRemainder : searchSpace[weight, result.Count]; }