To be really honest with you Dynamic Programming is just recursion with a Cache. The value of recurring states in the recursion are stored in that cache in order not to recalculate the value of those recursive states again.
Once a recursive code is written write, it can easily be converted into DP code just by adding 4 more lines. Moreover there are various group of problems that closely resembles each other. Learning one problem can help you solving other 10 more that resembles it. I have discovered some patterns and techniques that can help you a lot.
Please find below the top 10 Patterns of Dynamic Programming Problems :