Starting in the top left corner in a 20 by 20 grid, how many routes are there to the bottom right corner?
Note, we can not move up, or left at any point.
For input 2, there are 6 ways, as shown-
Solution 1- There is a combinatorics solution, which reduces the problem to a simple expression, in terms of 'N', but I solved it using Dynamic Programming, which is solution 2. If you want the expression, just ask :)
Solution 2 - There is a common problem in programming, where we need to find the sum of elements in a NxN matrix, moving from top left to bottom right, in same fashion. So I just use the strategy, but instead of summing the elements, I counted the number of paths. Also for a input N, the DP solution of mine needs a matrix of size (N+1)x(N+1). Try visualizing the above image imposed on a 3x3 matrix.
Python code-
#Problem 15 import numpy table = numpy.zeros((21, 21), dtype=numpy.int64) def rec(r, c): if table[r, c] != 0: return table[r, c] if r == 0 and c == 0: return 1 rsum = 0 csum = 0 if r != 0: rsum = rec(r-1, c) if c != 0: csum = rec(r, c-1) table[r, c] = rsum + csum return rsum + csum if __name__ == "__main__": n = int(raw_input("Enter n : ")) print rec(n, n)
If I remove the memoization, the input number '20' will take forever to come with solution.