Dynamic Programming is a type of problem solving technique used to solve programming problems which can be broken into sub-problems, and can be thought of as a “bottom-up” approach (solve the smallest sub-problems first, then solve sub-problems up to the size of the original problem). Dynamic Programming can turn exponential-time brute force approaches into polynomial complexity, vastly improving the performance of a given program. The lecture can be found on the Senior Computer Team website, or viewed here:
SCT Lecture 02: Dynamic Programming
On October 14, 2011, I gave a lecture on Dynamic Programming.