Dynamic Programming Its a technique to break big problem into smaller chunks and optimize them. Characteristics Overlapping subproblem Optimal substructure property Methods Top-down with memoization Bottom-up with Tabulation