Sneaking around concatMap: efficient combinators for dynamic programming
On the Theory of Dynamic Programming