# Minimum Cost Path

Posted: 30 Jul, 2020
Difficulty: Moderate

## PROBLEM STATEMENT

#### 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)
``````
##### Input Format:
``````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.
``````
##### Constraints:
``````1 <= T <= 50
1 <= N, M <= 100
-10000 <= cost[i][j] <= 10000
1 <= x, y <= 100

Time limit: 1 sec
`````` Approach 1

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.