Dynamic Programming

  1. Come up with a recursive function
  2. Memorize the intermediate results
  3. Make it bottom up