Top-down uses recursion with memoization (compute states on demand). Bottom-up fills a table iteratively from smaller subproblems to bigger ones. Both reuse results; choose based on clarity and memory/control needs.