Sorry in advance if this question sounds dumb...
As far as I know, building an algorithm using dynamic programming works this way:
- express the problem as a recurrence relation;
- implement the recurrence relation either via memoization or via a bottom up approach.
As far as I know, I have said everything about dynamic programming. I mean: dynamic programming does not give tools/rules/methods/theorems for expressing recurrence relations, nor for turning them into code.
So, what's special about dynamic programming? What does it give you, other than a vague method for approaching a certain kind of problems?