思路
动态规划的思想,使用dp[i][j]代表以grid[i][j]结尾的最小下降路径的值。
- dp的初始化:dp[i][j]=dp[0][j],当在数组第一行时,最小下降路径值就是数组相应位置的值。
- dp递推公式:dp[i][j]=min(dp[i-1][k]+grid[i][j]) k!=j
最终,取dp数组中最后一行的最小值即为答案
代码
class Solution {
public:
int minFallingPathSum(vector<vector<int>>& grid) {
int n = grid.size();
vector<vector<int>> dp(n,vector<int>(n,INT_MAX));
for(int i=0;i<n;i++)
{
dp[0][i] = grid[0][i];
}
for(int i=1;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
if(k==j)
{
continue;
}
dp[i][j] = min(dp[i][j],dp[i-1][k]+grid[i][j]);
}
}
}
int ret = INT_MAX;
for(int i=0;i<n;i++)
{
ret = min(ret,dp[n-1][i]);
}
return ret;
}
};