Problem of the day
You have been given a matrix of ‘N’ rows and ‘M’ columns filled up with integers. Find the minimum sum that can be obtained from a path which from cell (x,y) and ends at the top left corner (1,1).
From any cell in a row, we can move to the right, down or the down right diagonal cell. So from a particular cell (row, col), we can move to the following three cells:
Down: (row+1,col)
Right: (row, col+1)
Down right diagonal: (row+1, col+1)
The first line will contain two integers ‘N’ and ‘M’ denoting the number of rows and columns, respectively.
Next ‘N’ lines contain ‘M’ space-separated integers each denoting the elements in the matrix.
The last line will contain two integers ‘x’ and ‘y’ denoting the cell to start from.
Output Format:
For each test case, print an integer that represents the minimum sum that can be obtained by traveling a path as described above.
Output for every test case will be printed in a separate line.
Note:
You don’t need to print anything; It has already been taken care of.
1 <= T <= 50
1 <= N, M <= 100
-10000 <= cost[i][j] <= 10000
1 <= x, y <= 100
Time limit: 1 sec
3 4
3 4 1 2
2 1 8 9
4 7 8 1
2 3
12
The minimum cost path will be (0, 0) -> (1, 1) -> (2, 3), So the path sum will be (3 + 1 + 8) = 12, which is the minimum of all possible paths.
3 4
11 2 8 6
2 12 17 6
3 3 1 8
3 4
25
Think of trying all possible paths that can be taken from (1,1) to (X,Y). Can you implement this using recursion?
Let’s start from cell (X,Y). There are 3 possible cells from which we can come to (X,Y) (assuming they don’t violate the bounds of the array): cells (X-1, Y), (X, Y-1) and (X-1, Y-1). Now we find the minimum cost to reach these three cells. Here, we observe that this problem exhibits optimal substructure, i.e. this problem can be divided into smaller subproblems that do not overlap.
Create a recursive function minCost(int X, int Y), that computes the minimum cost it takes to reach cell (X,Y) from (1,1). The base case would be for cell (1,1) itself.
O(3^(X*Y)), where X and Y are the coordinates of the destination cell.
There are X*Y cells to consider (we don’t consider the whole matrix), and from each cell we can move to 3 other cells.
O(X + Y), where X and Y are the coordinates of the destination cell.
A record of all recursive calls is maintained in a recursion stack.