diff --git a/Dynamic-Programming/MinimumCostPath.js b/Dynamic-Programming/MinimumCostPath.js new file mode 100644 index 000000000..3936f0af7 --- /dev/null +++ b/Dynamic-Programming/MinimumCostPath.js @@ -0,0 +1,37 @@ +// youtube Link -> https://www.youtube.com/watch?v=lBRtnuxg-gU + +const minCostPath = (matrix) => { + /* + Find the min cost path from top-left to bottom-right in matrix + >>> minCostPath([[2, 1], [3, 1], [4, 2]]) + 6 + */ + const n = matrix.length + const m = matrix[0].length + + // Preprocessing first row + for (let i = 1; i < m; i++) { + matrix[0][i] += matrix[0][i - 1] + } + + // Preprocessing first column + for (let i = 1; i < n; i++) { + matrix[i][0] += matrix[i - 1][0] + } + + // Updating cost to current position + for (let i = 1; i < n; i++) { + for (let j = 1; j < m; j++) { + matrix[i][j] += Math.min(matrix[i - 1][j], matrix[i][j - 1]) + } + } + + return matrix[n - 1][m - 1] +} + +const main = () => { + console.log(minCostPath([[2, 1], [3, 1], [4, 2]])) + console.log(minCostPath([[2, 1, 4], [2, 1, 3], [3, 2, 1]])) +} + +main()