Minimum Falling Path Sum — Grid DP
Advertisement
Problem
Choose one element from each row such that adjacent elements differ by at most one column. Minimize sum.
Solutions
Python
class Solution:
def minFallingPathSum(self, matrix: list[list[int]]) -> int:
n=len(matrix)
for i in range(1,n):
for j in range(n):
best=matrix[i-1][j]
if j>0: best=min(best,matrix[i-1][j-1])
if j<n-1: best=min(best,matrix[i-1][j+1])
matrix[i][j]+=best
return min(matrix[-1])
C++
class Solution {
public:
int minFallingPathSum(vector<vector<int>>& m){
int n=m.size();
for(int i=1;i<n;i++) for(int j=0;j<n;j++){
int best=m[i-1][j];
if(j>0) best=min(best,m[i-1][j-1]);
if(j<n-1) best=min(best,m[i-1][j+1]);
m[i][j]+=best;
}
return *min_element(m.back().begin(),m.back().end());
}
};
Complexity
- Time: O(n²) | Space: O(1) in-place
Advertisement
← Previous
Strange Printer — Interval DP