Three decisions and some bookkeeping
Every dynamic program is the same three decisions:
- The state. What arguments identify a subproblem?
- The transition. How is a state's value built from other states?
- The order. In what sequence can they be evaluated so dependencies are ready?
Everything else, the arrays, the loop bounds, the base cases, is bookkeeping that follows from those three.
Most people learn dynamic programming as a catalogue of recurrences: the knapsack one, the edit distance one, the coin change one. That does not transfer, because the next problem is not in the catalogue. Choosing a state does transfer. Once the state is right, the transition is usually forced, the order is read off the transition, and the running time falls out of both without any further analysis.

