This document discusses dynamic programming and its application to problems involving matrix chain multiplication and edit distance. It provides examples of how dynamic programming can be used to solve problems involving overlapping subproblems more efficiently than naive recursive solutions. Specifically, it describes how dynamic programming formulations using memoization tables can compute matrix chain multiplications and edit distances in quadratic time rather than exponential time required by naive recursive approaches.