let h = 4 let w = 4 let cost = [| [| 1; 3; 1; 2 |]; [| 1; 5; 1; 3 |]; [| 4; 2; 1; 4 |]; [| 1; 6; 2; 3 |] |] let min_cost_path () = let dp = Array.init h (fun _ -> Array.make w 0) in dp.(0).(0) <- cost.(0).(0); for j = 1 to w - 1 do dp.(0).(j) <- dp.(0).(j - 1) + cost.(0).(j) done; for i = 1 to h - 1 do dp.(i).(0) <- dp.(i - 1).(0) + cost.(i).(0) done; for i = 1 to h - 1 do for j = 1 to w - 1 do let a = dp.(i - 1).(j) in let b = dp.(i).(j - 1) in dp.(i).(j) <- (if a < b then a else b) + cost.(i).(j) done done; dp.(h - 1).(w - 1) ;; min_cost_path ()