Dynamic programming is about using past knowledge to build new solutions.
The top down strategy breaks the problem into subproblems. The bottom up approach builds on smaller subproblems to reach a bigger solution. The idea is to save and reuse partial solutions to climb the difficulty layers. This can also be called memoization.