Algorithms that use dynamic programming (from wikipedia)