【leetcode931】 下降路徑最小和(基礎DP)
阿新 • • 發佈:2018-11-21
題目:
一個矩陣,從上到下走一遍,只允許走相鄰的列,然後每一個位置有一個權值,求經過路徑的最小權值和。
思路:
基礎DP了,dp[i][j]表示到達位置(i,j)所需要的花費的權值。那麼他可以由三種狀態轉化而來。
(i-1,j-1),(i-1,j),(i-1,j+1)就是上一列與其相鄰列的三個位置。(注意邊界的時候需要分類討論)
所以dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1])+value[i][j]
程式碼:
class Solution { public: int minFallingPathSum(vector<vector<int>>& A) { int dp[105][105]; int sz = A.size(); for(int i=0;i<sz;i++)dp[0][i] = A[0][i]; for(int i=1;i<sz;i++){ for(int j=0;j<sz;j++){ if(j==0)dp[i][j] = min(dp[i-1][j],dp[i-1][j+1])+A[i][j]; else if(j==sz-1)dp[i][j] = min(dp[i-1][j],dp[i-1][j-1])+A[i][j]; else { dp[i][j] = min(dp[i-1][j],dp[i-1][j-1])+A[i][j]; dp[i][j] = min(dp[i][j],dp[i-1][j+1]+A[i][j]); } } } int ma = 1e9; for(int i=0;i<sz;i++){ ma = min(ma,dp[sz-1][i]); } return ma; } };