def climbing_stairs_three_dp(steps: int) -> int:
    """Staircase by bottom-up dynamic programming.

    Time complexity: O(n).
    Space complexity: O(n).
    """
    T = [0] * (steps + 1)
    T[0] = 1
    T[1] = 1
    T[2] = 2
    
    for s in range(3, steps + 1):
        T[s] = T[s - 1] + T[s - 2] + T[s - 3]
    return T[steps]