我正在努力弄清楚如何处理这段代码,这些代码无法正确编译。我试图为背包问题编写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) ;;
答案 0 :(得分:3)
您获得的语法错误是由于使用了for循环。语法是following:
for i = 1 to n_jobs () do
do_next_job ()
done
由于这是副作用,所以不要忘记使用;在“完成”之后继续执行功能。您的代码还有其他问题,但这应该可以解决语法错误。