2022-10-09 06:49:35 +00:00
|
|
|
// (problem Link) - [https://leetcode.com/problems/minimum-path-sum/]
|
|
|
|
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
int minSumPathUtil(int i, int j,vector<vector<int>> &matrix,vector<vector<int>> &dp)
|
|
|
|
{
|
|
|
|
if(i==0 && j == 0)
|
|
|
|
return matrix[0][0];
|
|
|
|
if(i<0 || j<0)
|
|
|
|
return 1e9;
|
|
|
|
if(dp[i][j]!=-1) return dp[i][j];
|
|
|
|
|
|
|
|
int up = matrix[i][j]+minSumPathUtil(i-1,j,matrix,dp);
|
|
|
|
int left = matrix[i][j]+minSumPathUtil(i,j-1,matrix,dp);
|
|
|
|
|
|
|
|
return dp[i][j] = min(up,left);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
int minSumPath(int n, int m, vector<vector<int> > &matrix){
|
|
|
|
vector<vector<int> > dp(n,vector<int>(m,-1));
|
|
|
|
return minSumPathUtil(n-1,m-1,matrix,dp);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
|
|
|
vector<vector<int> > matrix{{5,9,6},
|
|
|
|
{11,5,2}};
|
|
|
|
|
|
|
|
int n = matrix.size();
|
|
|
|
int m = matrix[0].size();
|
|
|
|
|
|
|
|
cout<<minSumPath(n,m,matrix);
|
2022-10-09 06:56:25 +00:00
|
|
|
}
|
|
|
|
// Time Complexity: O(N*M)
|
|
|
|
// Space Complexity: O((M-1)+(N-1)) + O(N*M)
|
|
|
|
// example : N=2,M=3
|
|
|
|
// Min pathsum = 5+9+6+2 =21
|