Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 21s
Bottom-up DP minimum-path through a triangle:
2
3 4
6 5 7
4 1 8 3
let min_path_triangle rows =
initialise dp from last row;
for r = n - 2 downto 0 do
for c = 0 to row_len - 1 do
dp.(c) <- row.(c) + min(dp.(c), dp.(c+1))
done
done;
dp.(0)
The optimal path 2 -> 3 -> 5 -> 1 sums to 11.
Tests downto loop, Array.of_list inside loop body, nested arr.(i)
reads + writes, and inline if-then-else for min.
74 baseline programs total.
18 lines
485 B
OCaml
18 lines
485 B
OCaml
let min_path_triangle rows =
|
|
let n = List.length rows in
|
|
let dp = Array.make n 0 in
|
|
let last = List.nth rows (n - 1) in
|
|
let i = ref 0 in
|
|
List.iter (fun x -> dp.(!i) <- x; i := !i + 1) last;
|
|
for r = n - 2 downto 0 do
|
|
let row = Array.of_list (List.nth rows r) in
|
|
for c = 0 to Array.length row - 1 do
|
|
dp.(c) <- row.(c) + (if dp.(c) < dp.(c + 1) then dp.(c) else dp.(c + 1))
|
|
done
|
|
done;
|
|
dp.(0)
|
|
|
|
;;
|
|
|
|
min_path_triangle [[2]; [3; 4]; [6; 5; 7]; [4; 1; 8; 3]]
|