-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path64.minimum-path-sum.cpp
More file actions
69 lines (60 loc) · 1.95 KB
/
64.minimum-path-sum.cpp
File metadata and controls
69 lines (60 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class Solution {
public:
int minsum = INT_MAX;
int solve(vector<vector<int>>& grid, int m, int n, int sum, vector<vector<int>>& dp){
if(m == grid.size() || n==grid[0].size()) {
return 0;
}
if(m == grid.size()-1 && n==grid[0].size()-1) {
sum = sum+grid[m][n];
minsum = min(sum, minsum);
dp[m][n] = min(dp[m][n], sum);
return sum;
}
sum = sum+grid[m][n];
dp[m][n] = min(dp[m][n], sum);
solve(grid,m+1,n, sum, dp);
solve(grid, m, n+1, sum, dp);
if(m == 0 && n == 0)
dp[m][n] = grid[m][n];
else if(m == 0)
dp[m][n] = dp[m][n-1];
else if(n == 0)
dp[m][n] = dp[m-1][n];
else
dp[m][n] = min(dp[m-1][n], dp[m][n-1]);
return grid[m][n]+ dp[m][n];
}
void print(vector<vector<int>> dp){
for(auto i : dp){
for(auto j : i){
cout<<j<<" ";
}
cout<<endl;
}
}
void solveDP(vector<vector<int>>& grid, vector<vector<int>>& dp){
int m = grid.size();
int n = grid[0].size();
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(i == 0 && j == 0)
dp[i][j] = grid[i][j];
else if(i == 0)
dp[i][j] = grid[i][j] + dp[i][j-1];
else if(j == 0)
dp[i][j] = grid[i][j] + dp[i-1][j];
else
dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]);
}
}
}
int minPathSum(vector<vector<int>>& grid) {
vector<vector<int>> dp(grid.size(), vector<int>(grid[0].size(), INT_MAX));
int sum = 0;
// solve(grid, 0, 0, sum, dp);
solveDP(grid, dp);
// print(dp);
return dp[grid.size()-1][grid[0].size()-1];
}
};