Dynamic ProgrammingDynamic programming applies when a problem has overlapping subproblems — the same sub-computation