【多维DP】力扣576. 出界的路径数

embedded/2024/12/26 3:18:03/

给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你 最多 可以移动 maxMove 次球。

给你五个整数 m、n、maxMove、startRow 以及 startColumn ,找出并返回可以将球移出边界的路径数量。因为答案可能非常大,返回对 109 + 7 取余 后的结果。

示例 1:
在这里插入图片描述
输入:m = 2, n = 2, maxMove = 2, startRow = 0, startColumn = 0
输出:6

示例 2:
在这里插入图片描述
输入:m = 1, n = 3, maxMove = 3, startRow = 0, startColumn = 1
输出:12

提示:
1 <= m, n <= 50
0 <= maxMove <= 50
0 <= startRow < m
0 <= startColumn < n

动态规划

class Solution {
public:int findPaths(int m, int n, int maxMove, int startRow, int startColumn) {int MOD = 1e9 + 7;vector<vector<int>> directions = {{1,0}, {-1,0}, {0,1}, {0,-1}};int outcounts = 0;vector<vector<vector<int>>> dp(maxMove+1, vector<vector<int>>(m, vector<int>(n)));dp[0][startRow][startColumn] = 1;for(int i = 0; i < maxMove; i++){for(int j = 0; j < m; j++){for(int k = 0; k < n; k++){int count = dp[i][j][k];if(count > 0){for(auto direction : directions){int j1 = j + direction[0], k1 = k + direction[1];if(j1 >= 0 && j1 < m && k1 >= 0 && k1 < n){dp[i+1][j1][k1] = (dp[i+1][j1][k1] + count) % MOD;}else{outcounts = (outcounts + count) % MOD;}         }}}}}return outcounts;}
};

这道题可以定义一个三维数组dp[i][j][k]用来表示走了i步后落在位置(j,k)的路径总数。我们需要知道的一点是,当我们确定了第i步落在了(j,k),那么第i+1步有可能是向上向下向左向右四种方向,对应到不同的位置。如果(j1,k1)在界内,那么我们可以定义一个directions来计算第i+1步向四个不同方向走后的状态转移方程dp[i+1][j1][k1] = (dp[i+1][j1][k1] + count) % MOD;,count是dp[i][j][k],j1和k1是第i+1步后落的位置。如果j1和k1在界外,那么就记录到出界的路径数outcounts中。

注:由于i+1只由i转移而来,可以压缩dp[i][j][k]为dp[j][k],进行空间优化。


http://www.ppmy.cn/embedded/148787.html

相关文章

C++的侵入式链表

非侵入式链表 非侵入式链表是一种链表数据结构&#xff0c;其中每个元素&#xff08;节点&#xff09;并不需要自己包含指向前后节点的指针。链表的结构和节点的存储是分开的&#xff0c;链表容器会单独管理这些指针。 常见的非侵入式链表节点可以由以下所示&#xff0c;即&a…

[Python] 圆形嵌套图Circular Packing

在Python中&#xff0c;生成圆形嵌套图&#xff08;Circular Packing&#xff09;通常涉及使用图形库或可视化工具来绘制一系列嵌套的圆形&#xff0c;这些圆形可能代表某种层次结构或数据分布。一个流行的选择是使用 matplotlib 库&#xff0c;它是Python中一个广泛使用的绘图…

iClient3D for Cesium在Vue中快速实现场景卷帘

作者&#xff1a;gaogy 1、背景 iClient3D for Cesium是由SuperMap提供的一个前端3D地图客户端&#xff0c;提供了丰富的功能与接口&#xff0c;使得开发者能够在Web应用中快速集成并展现3D地理信息。而在Vue框架中集成iClient3D&#xff0c;不仅可以利用Vue的响应式特性提高开…

lxml提取某个外层标签里的所有文本

html如下 <div data-v-1cf6f280"" class"analysis-content">选项D错误&#xff1a;<strong>在衡量通货膨胀时&#xff0c;</strong><strong>消费者物价指数使用得最多、最普遍</strong>。 </div> 解析html文本 fro…

Word表格批量添加题注代码

操作步骤 打开word&#xff0c;点击“开发工具”&#xff0c;进入Visual Basic&#xff0c;点击“Normal”,右键&#xff0c;插入“模块”。输入代码如下&#xff1a; Sub 批量添加表格题注() For i 1 To ActiveDocument.Tables.CountActiveDocument.Tables(i).Range.Insert…

SpringMVC的URL组成,以及URI中对/斜杠的处理,解决IllegalStateException: Ambiguous mapping

SpringMVC的URL组成 ip 端口号 上下文 类上的RequestMapping的URI 方法上的RequestMapping的URI 规则 非空URI前会自动拼接/连续的斜杠会被替换成单个斜杠方法的URI前没有斜杠与只有一个斜杠的两种接口&#xff0c;同时存在时&#xff0c;拼接前面的斜杠后再替换重复斜杠&…

点亮核心板小灯 STM32U575

将核心板上的运行状态指示灯点亮 任务分析 灯如何点亮 如何看开发板原理图 开发板上的灯硬件组成 原理图 原理图&#xff08;Schematic Diagram&#xff09;&#xff0c;也称为电路图或电气图&#xff0c;是一种图形表示方法&#xff0c;用于展示电子系统或电路的工作原理和…

机器学习常用术语

目录 概要 机器学习常用术语 1、模型 2、数据集 3、样本与特征 4、向量 5、矩阵 6、假设函数与损失函数 7、拟合、过拟合与欠拟合 8、激活函数(Activation Function) 9、反向传播(Backpropagation) 10、基线(Baseline) 11、批量(Batch) 12、批量大小(Batch Size)…