Dynamic programming is like a game. In the game you want to find the best way to get from point A to point B. To do this, you break the game down into smaller pieces, and then figure out how to solve each of those pieces in the most efficient way. You keep doing this until you reach point B, which is when you have the best way to get from A to B.