LeetCode 329. 矩阵中的最长递增路径 (经典的记忆化搜索入门题)

矩阵中的最长递增路径
做题的思路还是DP状态转移方程的思想。
每个都有可能依赖上下左右四个点的状态。

const int dx[] = {-1,0,1,0};
const int dy[] = {0,1,0,-1};
class Solution {
public:
    vector<vector<int>> dp;
    int m,n;
    int longestIncreasingPath(vector<vector<int>>& a) {
        if(a.size()==0 || a[0].size()==0) return 0;
        m = a.size() , n = a[0].size(); 
        dp.resize(m,vector<int>(n,0));
        for(int i =0;i<m;i++){
            for(int j=0;j<n;j++){
                if(dp[i][j]==0){
                    dfs(i,j,a);
                }
            }
        }
        int ans = 0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                ans = max(ans,dp[i][j]);
            }
        }   
        return ans;
    }
    int dfs(int x,int y,vector<vector<int>>& a){
        if(dp[x][y]){
            return dp[x][y];
        }
        int res = 0; 
        for(int k=0;k<4;k++){
            int nx = x+dx[k];
            int ny = y+dy[k];
            if(nx>=0 && nx<m && ny>=0 && ny<n && a[x][y]<a[nx][ny]){
                res = max(res,dfs(nx,ny,a));
            }
        }
        return dp[x][y] = res+1; 
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/107598880