The big idea in plain words
Dynamic programming is just doing a calculation once and scribbling the answer in the margin so you never have to redo it. If a big answer is built from smaller answers that you'll need again and again, save them instead of recomputing.
Example: ways to climb 5 stairs taking 1 or 2 steps at a time. The ways to reach step 5 equal the ways to reach step 4 plus the ways to reach step 3 (because your last move was either a 1-step or a 2-step). So you jot down each step's count as you climb - 1, 2, 3, 5, 8 - instead of recalculating the lower steps over and over. That little notebook is what turns a slow problem fast.