力扣10.10

news/2024/10/19 9:46:27/

329. 矩阵中的最长递增路径

给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。

数据范围

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 200
  • 0 <= matrix[i][j] <= 231 - 1

分析

对每个(i,j)点进行记忆化搜索,令dp[i][j]表示以(i,j)为结尾的最长路径,
遍历四个方向,状态转移如下

  • d p [ i ] [ j ] = m a x ( d p [ i ] [ j ] , d p [ n x ] [ n y ] + 1 ) dp[i][j]=max(dp[i][j],dp[nx][ny] + 1) dp[i][j]=max(dp[i][j],dp[nx][ny]+1)

代码

class Solution {
public:const static int N = 200 + 5;int n, m;int dp[N][N];bool vis[N][N];int dx[4] = {0, 1, 0, -1};int dy[4] = {1, 0, -1, 0};void dfs(int x, int y, vector<vector<int>>& matrix) {if(dp[x][y]) return ;for(int i = 0; i < 4; i ++ ) {int nx = x + dx[i];int ny = y + dy[i];if(nx < 0 || ny < 0 || nx >= n || ny >= m) continue;if(vis[nx][ny]) continue;if(matrix[nx][ny] >= matrix[x][y]) continue;vis[nx][ny] = true;dfs(nx, ny, matrix);dp[x][y] = max(dp[x][y], 1 + dp[nx][ny]); vis[nx][ny] = false;}return ;}int longestIncreasingPath(vector<vector<int>>& matrix) {n = matrix.size();m = matrix[0].size();int res = 0;for(int i = 0; i < n; i ++ ) {for(int j = 0; j < m; j ++ ) {dfs(i, j, matrix);res = max(res, dp[i][j]);}}return res + 1;}
};

2328. 网格图中递增路径的数目

给你一个 m x n 的整数网格图 grid ,你可以从一个格子移动到 4 个方向相邻的任意一个格子。

请你返回在网格图中从 任意 格子出发,达到 任意 格子,且路径中的数字是 严格递增 的路径数目。由于答案可能会很大,请将结果对 109 + 7 取余 后返回。

如果两条路径中访问过的格子不是完全相同的,那么它们视为两条不同的路径。

数据范围

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 1000
  • 1 <= m * n <= 105
  • 1 <= grid[i][j] <= 105

分析

大致思路和上题差不多,令dp[i][j]为以(i,j)为终点的路径条数,初始化 d p [ i ] [ j ] = 1 dp[i][j]=1 dp[i][j]=1,状态转移如下

  • d p [ i ] [ j ] + = d p [ n x ] [ n y ] dp[i][j]+=dp[nx][ny] dp[i][j]+=dp[nx][ny]

代码

typedef long long LL;
class Solution {
public:const static int mod = 1e9 + 7, N = 1e3 + 5;int n, m;LL res = 0;LL dp[N][N];bool vis[N][N];int dx[4] = {0, 1, 0, -1};int dy[4] = {1, 0, -1, 0};int dfs(int x, int y, vector<vector<int>>& grid) {if(dp[x][y]) return dp[x][y];LL& t= dp[x][y];dp[x][y] = 1;for(int i = 0; i < 4; i ++ ) {int nx = x + dx[i];int ny = y + dy[i];if(nx < 0 || ny < 0 || nx >= n || ny >= m) continue;if(grid[nx][ny] >= grid[x][y]) continue;if(vis[nx][ny]) continue;vis[nx][ny] = true;t += dfs(nx, ny, grid);t %= mod;vis[nx][ny] = false;}return t;}LL countPaths(vector<vector<int>>& grid) {n = grid.size();m = grid[0].size();for(int i = 0; i < n; i ++ ) {for(int j = 0; j < m; j ++ ) {res += dfs(i, j, grid);;res %= mod;}}return res;}
};

http://www.ppmy.cn/news/1538812.html

相关文章

【Coroutines】Implement Lua Coroutine by Kotlin - 2

Last Chapter Link 文章目录 Symmetric CoroutinesNon-Symmetric Coroutine SampleSymmetric Coroutine SampleHow to Implement Symmetric CoroutinesWonderful TricksCode DesignTail Recursion OptimizationFull Sources Symmetric Coroutines in last blog, we have talk…

Git 查看当前分支是基于哪个分支拉取(源头分支)

场景&#xff1a; 项目中使用 Git 管理代码仓库的时候&#xff0c;随着项目的持续迭代及项目的扩展&#xff0c;多版本并行开发是非常常见的事情&#xff0c;多版本并行开发就伴随着多分支&#xff0c;随着 Git 的分支越拉越多&#xff0c;这时候很容易造成分支的混乱&#xf…

CSS @规则(At-rules)系列详解___@charset规则使用方法

CSS 规则(At-rules)系列详解 ___charset规则使用方法 本篇目录&#xff1a; 零、时光宝盒 一、charset规则定义和用法 二、CSS charset语法 三、charset 使用方法例子 1、正确使用方法 2、无效的&#xff0c;错误的使用方法 零、时光宝盒 &#xff08;https://blog.csd…

浅谈虚拟电厂在分布式光伏发电应用示范区中的应用及前景

0引言 随着电力体制改革的持续推进&#xff0c;电力市场将逐步建立和完善&#xff0c;未来的售电主体也将随着配售电业务的逐步放开而日益多元化&#xff0c;新的政策不断鼓励分布式电源和微电网作为独立的配售电市场主体推动运营模式的创新。与微电网所采取的就地应用为控制目…

【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句`a++`的执行过程

【基于ARM深入分析C程序】1–ARM架构与汇编、分析C语句a的执行过程 文章目录 【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句a的执行过程一、3个操作指令二、CPU是怎么知道执行这三条操作指令的&#xff1f;2.1 CPU的架构 2.2 寄存器 本文作为学习笔记&#xff0c;围绕的…

高防服务器为何有时难以防御CC攻击及其对策

高防服务器通常被用来抵御各种类型的DDoS攻击&#xff0c;包括CC&#xff08;Challenge Collapsar&#xff09;攻击。然而&#xff0c;在某些情况下&#xff0c;即使是配备了高级防护措施的高防服务器也可能难以完全防御CC攻击。本文将探讨导致这一现象的原因&#xff0c;并提供…

衡石分析平台系统-分析人员手册

应用创建​ 用户可以通过多种方式创建应用&#xff0c;不同场景下应用创建方法不同。 新建空白应用​ 新建空白应用是新建一个空的应用&#xff0c;应用中没有数据集和仪表盘。 点击应用创作页面右上方的新建应用&#xff0c;新建空白的分析应用和查询应用。 新建的空白应用…

如何创建诊断数据库模板(CDDT)

创建一个新的模板文件有两种方式&#xff1a; 1.修改现有模板形成自定义的模板 CANdelaStudio 21提供了基本范本&#xff0c;Vector_UDS_21.cddt&#xff0c;存放在C:\Users\Public\Documents\Vector\CANdelaStudio\21\Examples目录下。打开CANdelaStudio软件后&#xff0c;点击…