import Data.Array memoized_binomial :: Integer -> Integer -> Integer memoized_binomial a b = arr ! (a, b) where arr = array ((0, 0), (size, size)) [((x, y), inner (x, y) size) | x <- [0..size], y <- [0..size]] where inner (x, y) size | x == 0 && y == 0 = 0 | x == 0 || y == 0 = 1 | otherwise = arr ! (x - 1, y) + arr ! (x, y - 1) size = max a b main = putStrLn $ show $ memoized_binomial 800 800