Actually, there are two ways to approach the same problem using Dynamic Programming.
But the problem with the top-down approach is that it requires recursion, thus not very efficient for large inputs as it will blow up the stack. Also, the top-down approach starts with the bigger problem which can't be calculated until answer to smaller subproblem is known, thus lots of push is performed on the stack for large inputs.
On the other hand in the bottom-up approach, we start with smaller subproblem, such that when we calculate the larger problem, answers to smaller subproblem is already known. Therefore no need of stack.
Hence, Dynamic Programming always uses the bottom-up approach.