let egg_drop eggs floors = let dp = Array.init (eggs + 1) (fun _ -> Array.make (floors + 1) 0) in for f = 1 to floors do dp.(1).(f) <- f done; for e = 1 to eggs do dp.(e).(0) <- 0; dp.(e).(1) <- 1 done; for e = 2 to eggs do for f = 2 to floors do let best = ref 100000000 in for k = 1 to f do let bre = dp.(e - 1).(k - 1) in let sur = dp.(e).(f - k) in let cand = 1 + (if bre > sur then bre else sur) in if cand < !best then best := cand done; dp.(e).(f) <- !best done done; dp.(eggs).(floors) ;; egg_drop 2 36