My personal advice for anyone wishing to master dynamic programming: learn about recurrence relations first. When I first started learning dynamic programming I didn't know about recurrence relations. It was very frustrating to somehow "sense" that a problem involves dynamic programming but can't describe it properly; that basically means I'm unable to apply dynamic programming principles to any new problems other than a few studied and memorized examples like LCS.<p>Later on after I learned recurrence relations I relearned dynamic programming and it's a breeze. To be sure you just need to structure your mind to think about these problems in terms of recurrence relations. You don't need to go as deep as I did learning about generating functions (though they are interesting and useful on their own).<p>Also I don't believe in learning it in 30 minutes. You can get an overview in 30 minutes, much like you can finish a chapter or two in a calculus textbook in 30 minutes. But you won't really learn it until you do the exercises and practice problems.