Since examples are the best way to go understand dynamic programming, here are three more classic dynamic programming problems. Make sure you either solve the each problem or try at least for a few hours before reading the solution.

Counting paths in a grid

You have a rectangular grid of points with n rows and n columns. You start at the bottom left corner. At each step, you can either go up to the next point in the same column or right to the next point in the same row. How many such paths are there from the bottom left corner to the top right corner?

What if some points are deleted (that is, no path can go through these points)?

Longest common substring

Given two strings, S of length m and T of length n, find the longest strings which are substrings of both S and T. The algorithm should have complexity O(nm).

Longest common subsequence

Given two strings, find the longest subsequence common both of them. This problem differs from problems of finding common substrings: unlike substrings, subsequences are not required to occupy consecutive positions within the original sequences.

Solutions to both the above problems can be found at ICO Training Material. Again, make sure you solve the problems or try for a few hours each before looking at the solutions.