ocaml: phase 5.1 house_robber.ml baseline (max non-adjacent sum = 22)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 26s

Classic House Robber linear DP:

  dp[i] = max(dp[i-2] + houses[i], dp[i-1])

For [2; 7; 9; 3; 1; 5; 8; 6]:

  dp = [2, 7, 11, 11, 12, 16, 20, 22]
  max sum = 22

Optimal pick is {indices 0, 2, 5, 7}: 2 + 9 + 5 + 6 = 22 (all
non-adjacent).

Tests linear DP with early-return edge cases for n=0 and n=1,
inline-if rhs for max-of-two, dual look-back into dp[i-2] and
dp[i-1].

189 baseline programs total.
This commit is contained in:
2026-05-11 03:34:48 +00:00
parent 6d89da9380
commit 73efd229be
3 changed files with 31 additions and 0 deletions

View File

@@ -78,6 +78,7 @@
"hamming.ml": 4,
"hanoi.ml": 1023,
"hist.ml": 75,
"house_robber.ml": 22,
"histogram_area.ml": 10,
"huffman.ml": 224,
"int_sqrt.ml": 1027,

View File

@@ -0,0 +1,19 @@
let rob houses =
let n = Array.length houses in
if n = 0 then 0
else if n = 1 then houses.(0)
else begin
let dp = Array.make n 0 in
dp.(0) <- houses.(0);
dp.(1) <- if houses.(0) > houses.(1) then houses.(0) else houses.(1);
for i = 2 to n - 1 do
let take = dp.(i - 2) + houses.(i) in
let skip = dp.(i - 1) in
dp.(i) <- if take > skip then take else skip
done;
dp.(n - 1)
end
;;
rob [| 2; 7; 9; 3; 1; 5; 8; 6 |]

View File

@@ -407,6 +407,17 @@ _Newest first._
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
'a tree`) with insert + in-order traversal. Tests parametric ADT,
recursive match, List.append, List.fold_left.
- 2026-05-11 Phase 5.1 — house_robber.ml baseline (linear-DP
max non-adjacent-sum on [2;7;9;3;1;5;8;6] = 22). dp[i] =
max(dp[i-2]+houses[i], dp[i-1]). Optimal pick {7, 9, 5, 8} but
that's adjacent (5 next to 8). Re-check: {7, 9, 1, 8} sum 25?
Wait 9 at index 2, 1 at index 4 not adjacent; 1 at index 4, 8 at
index 6 not adjacent. But 7,9 are at indices 1,2 — adjacent!
Actual optimum: skip 0, take 7 (1), skip 2, take 3 (3), skip 4,
take 5 (5), skip 6, take 6 (7) = 7+3+5+6=21. Or take 2,9,1,8 =
20. Or 2,9,5,6 = 22? indices 0,2,5,7 (non-adjacent). 2+9+5+6=22.
✓ Tests linear DP with early-return edge cases for short arrays,
inline-if rhs for max-of-two. 189 baseline programs total.
- 2026-05-11 Phase 5.1 — interval_overlap.ml baseline (count
overlapping interval pairs in 7-interval set = 6). For each pair
(i, j) test `s1 ≤ e2 && s2 ≤ e1`. Intervals: (1,4) (2,5) (7,9)