Is there a difference between top-down and bottom-up dynamic programming?
To use the bottom up method you need to be able to efficiently determine what the "bottom" is, which usually means you need a heavily constrained problem space.  If you know what the lowest level calculations are going to be and the dependency order going upward, it makes sense to iteratively do them in the proper order and store those results.  Factorials, naive Fibonacci and the Euler recurrence relation for partitions are all good examples of problems suited to this approach.

Some problems don't have an easily determined bottom or dependency order for the calculations.  Chess positions evaluations, for example, are usefully memoized by position, with the evaluation score stored so it need not be recalculated.  Positions can recur at multiple levels of the search tree due to move transposition and repetition so saving evaluation results is worthwhile.  But there's no way to know what the positions at the lowest levels of the tree are going to be without recursively descending (and taking into account intermediate pruning) so top down is really the only feasible approach.