Мне сложно понять, что делать с этим кодом, который неправильно компилируется. Я пытаюсь написать версию DP для проблемы с рюкзаком. Я хочу отслеживать предыдущее решение для подзадач, сохраняя их в памяти, используя матрицу под названием mem . Я хочу, чтобы все значения были равны -1 (т. Е. еще не вычислено ), за исключением краевых условий, т. Е. Для веса рюкзака 0 или 0 предметов. Поэтому я инициализирую матрицу в -1 и изменяю ее значения в граничных условиях. Но я не знаю, как передать массив mem после этого в следующую часть кода. Я пытался использовать в или и , но это не работает.
Помощь с благодарностью!
let knapsack_mem = fun (vps : (int * int) array) (c : int) ->
let mem = Array.make_matrix (c + 1) ((Array.length vps) + 1) (-1) in
mem.(0) <- Array.make (n + 1) 0; for i = 1 to c do mem.(i).(0) <- 0;
(* HERE : in ? and ? *)
let rec aux vps (i,j) =
if mem.(i).(j) >= 0 then mem.(i).(j)
else
if lst vps.(i) <= i then max ((aux vps (i - lst vps.(i), j - 1)) + fst vps.(i)) (aux vps (i, j - 1))
else aux vps (i,j - 1)
in aux vps (c, (Array.length vps) + 1) ;;