classSolution{public:intmaxMoves(vector<vector<int>>& grid){int m = grid.size(), n = grid[0].size();
function<int(int,int)> dfs =[&](int i,int j){// 到最后一列了if(j == n-1)return0;int res =0;for(int k = i-1; k <= i+1; k++){if(k >=0&& k < m && grid[k][j+1]> grid[i][j]){// 记录最大值
res =max(res,dfs(k, j+1)+1);}}return res;};int res =0;for(int i =0; i < m; i++)
res =max(res,dfs(i,0));return res;}};
代码(DP首刷看解析)
classSolution{public:intmaxMoves(vector<vector<int>>& grid){int m = grid.size(), n = grid[0].size();
vector<vector<int>>dp(m,vector<int>(n));for(int j = n-2; j >=0; j--){for(int i =0; i < m; i++){for(int k = i-1; k <= i+1; k++){if(k <0|| k >= m || grid[k][j+1]<= grid[i][j])continue;
dp[i][j]=max(dp[i][j], dp[k][j+1]+1);}}}int ans =0;for(int i =0; i < m; i++)
ans =max(ans, dp[i][0]);return ans;}};