*Dynamic Programming*is a nice general procedure to attack some specific exponential algorithms and reduce them to polynomial time. But beware, they aren't usually created taking in mind the symmetries of the problem in question, so they may leave a lot to desire to come close to a algorithm designed with the given problem in mind.

So for instance, matrix chain multiplication which is a textbook example for dynamic programming will give out a O(n^3) algorithm. There are much better algorithms for this problem out there, specifically a O(n*log n) one.