Is dynamic programming the same as memoized recursion, or does it include techniques beyond that?
The tricky bit is figuring out what is the recurrence relation (recursion) for the problem you are trying to solve.
Exercises from a standard algorithm textbook like Kleinberg and Tardos should give enough practice in solving these problems. Not all of them are straightforward.