矩阵中的最长递增路径
做题的思路还是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;
}
};