In a way, yes, but the details may be cumbersome.
The main difference between bottom-up and top-down approaches is that we know the order to traverse the state space in advance.
If you are exploring a graph with a depth-first search (which is what memoization essentially does), there exists an order in which the vertices of that graph finish being processed (a value for the vertex is calculated and memoized). This order can be found by topologically sorting the graph. Then, you can calculate the values in that order, which can be viewed as going bottom up.
Still, for some graphs, there is no topological order coherent with the graph and expressible in a simple way (like for (row) for (col) calc (row, col)
).
Another problem with going bottom up is that, with a top-down solution, we visit only the states we in fact need for the calculation, and their amount may be way less than the total amount of states.
Addition. Moreover, for some algorithms, the order is calculated on-the-fly based on the values we calculate.
For a simple example, Dijkstra's algorithm can be viewed as dynamic programming, but the order in which the vertices are added to the tree of shortest paths depends on the distances we calculate.
Thus we have to find all shortest distances, one way or another, to find the order, and so any bottom-up solution after finding the order becomes unnecessary.