The Indian Engineer

Problem 1289 Minimum Falling Path Sum II

Posted on 2 mins

Dp Matrix

Problem Statement

Link: Problem 1289

Question

Given an n x n integer matrix grid, return the minimum sum of a falling path with non-zero shifts.

A falling path with non-zero shifts is a choice of exactly one element from each row of grid such that no two elements chosen in adjacent rows are in the same column.

Example 1

1 2 3
4 5 6
7 8 9
Input: grid = [[1,2,3],[4,5,6],[7,8,9]]
Output: 13
Explanation:
The possible falling paths are:
[1,5,9], [1,5,7], [1,6,7], [1,6,8],
[2,4,8], [2,4,9], [2,6,7], [2,6,8],
[3,4,8], [3,4,9], [3,5,7], [3,5,9]
The falling path with the smallest sum is [1,5,7], so the answer is 13.

Example 2

7
Input: grid = [[7]]
Output: 7

Constraints

Solution

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& grid) {
        std::ios::sync_with_stdio(false);
        vector<vector<int>>dp(grid.size(),vector<int>(grid[0].size(),-1));
        int rows = grid.size(), cols = grid[0].size();
        int result = INT_MAX,temp;

        for(int j =0;j<cols;j++)
            dp[0][j] = grid[0][j];

        for(int i = 1;i<rows;i++)
        {
            for(int j = 0;j<cols;j++)
            {
                temp = INT_MAX;

                for(int k = 0;k<cols;k++)
                {
                    if(k!=j)
                    {
                        temp = min(temp, grid[i][j]+dp[i-1][k]);
                    }
                }
                dp[i][j] = temp;
            }
        }

        for(int j = 0;j<cols;j++)
            result = min(result,dp[rows-1][j]);

        return result;
    }
};

Complexity

Explaination


This shows the usage of iterative DP to solve a grid problem.


We can also use Dijkstras Algorithm to solve the same problem.