leetcode 2684. 矩阵中移动的最大次数

题目如下

数据范围

复制代码
本题使用常规动态规划就行,不过要注意由于有三个转移的方向,所以我们对dp数组的遍历应该是从上到下 从左到右即按列优先遍历。

通过代码

cpp 复制代码
class Solution {
public:
    int maxMoves(vector<vector<int>>& grid) {
        int n = grid.size();
        int m = grid[0].size();
        vector<vector<int>> dp(n,vector<int>(m,0));
        int ans = 0;
     
        for(int j = 1;j < m;j++){
            for(int i = 0;i < n;i++){
                
                if(j > 0 && grid[i][j] > grid[i][j - 1])dp[i][j] = max(dp[i][j],dp[i][j - 1] + 1);
                if(j > 0 && i > 0 && grid[i][j] > grid[i - 1][j - 1])dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + 1);
                if(j > 0 && i + 1 < n && grid[i][j] > grid[i + 1][j - 1])dp[i][j] = max(dp[i][j],dp[i + 1][j - 1] + 1);             if(dp[i][j] == 0)dp[i][j] = -1000000;
                //对于到不了的地方应该标记以防被后面的块作为有效路径算入
                ans = max(ans,dp[i][j]);
                
            }
            
        }
        /*for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                cout << dp[i][j] << " ";
            }
            cout << endl;
        }*/
        return ans;
    }
};
//tips 当然本题同样可以利用滚动数组的思想用一维数组来存储上一轮的数组 这里不多赘述
相关推荐
CoovallyAIHub3 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub3 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub3 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网5 小时前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
有意义5 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub7 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户726876103377 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect7 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
不想写代码的星星7 小时前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++
xlp666hub1 天前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode