Focus on what would happen in the first step what to choose from (values), Find the recursive function Find the cases (and base case) Determine which value is kept in target case

Then, memoize all the repeated subproblems by incrementing in a loop

Push vs Pull

Push DP - updating future states based on past states typically has like a i + 1 Pull dp starting thought from goal state evaluating immediate recursive cases typically has a i - 1 Both have base cases