首页 > 其他分享 >动态规划在二维数组上的运用

动态规划在二维数组上的运用

时间:2023-09-07 17:33:09浏览次数:36  
标签:初始化 示例 int 路径 ++ 二维 数组 动态 dp

力扣连接:https://leetcode.cn/problems/unique-paths/


题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:

动态规划在二维数组上的运用_数组

  • 输入:m = 3, n = 7
  • 输出:28

示例 2:

  • 输入:m = 2, n = 3
  • 输出:3

解释: 从左上角开始,总共有 3 条路径可以到达右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右

示例 3:

  • 输入:m = 7, n = 3
  • 输出:28

示例 4:

  • 输入:m = 3, n = 3
  • 输出:6

提示:

  • 1 <= m, n <= 100
  • 题目数据保证答案小于等于 2 * 10^9


初始化过程

  1. 确定dp数组(dp table)以及下标的含义

dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。

  1. 确定递推公式

想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。

此时在回顾一下 dp[i - 1][j] 表示啥,是从(0, 0)的位置到(i - 1, j)有几条路径,dp[i][j - 1]同理。

那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。

  1. dp数组的初始化

如何初始化呢,首先dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。

for (int i = 0; i < m; i++) dp[i][0] = 1;
for (int j = 0; j < n; j++) dp[0][j] = 1;


分析过程

动态规划在二维数组上的运用_i++_02



代码示例

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> dp(m, vector<int>(n, 0));
        for (int i = 0; i < m; i++) dp[i][0] = 1;
        for (int j = 0; j < n; j++) dp[0][j] = 1;
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
};

标签:初始化,示例,int,路径,++,二维,数组,动态,dp
From: https://blog.51cto.com/u_16246943/7399126

相关文章

  • 前端数据可视化:利用D3.js创建动态图表
    前言数据可视化是将数据以图表、图形等形式展示出来,以便更直观地理解和分析数据。D3.js(Data-DrivenDocuments)是一个强大的JavaScript库,用于创建交互式和动态的数据可视化。本文将介绍如何使用D3.js创建动态图表,并通过一个具体的示例来说明。示例:柱状图我们以柱状图为例,展示一......
  • Lnton羚通AI算法算力平台在海域可视化监管海域动态远程视频智能监管平台的构建方案
    一、方案背景随着科技的不断进步,智慧海域管理平台已成为海洋领域监管的关键工具。相比传统的视频监控方式,智慧海域管理平台通过建设近岸海域视频监控网、海洋环境监测网和海上目标探测网络等,实现了海洋管理的数字化转型。传统的监控方式需要大量人力物力,而智慧海域管理平台实现了......
  • 直播平台搭建,Scheduler 动态定时任务
     直播平台搭建,Scheduler动态定时任务 /** *定时任务管理类 *  *@author * */publicclassQuartzManager{ staticLoggerlogger=Logger.getLogger("QuartzManager");//创建一个SchedulerFactory工厂实例privatestaticSchedulerFactorygSchedulerFactory=......
  • 下拉列表select动态初始化 (JSP页面)
    HTML代码:<td><selectid="as_occt"name="as_occt"><optionselected="selected"value="">智能模糊搜索</option><optionvalue="content">仅搜索内容</option><o......
  • 数组与地址,数组名到底是什么?
    (数组与地址,数组名到底是什么?1.问题引出案例:设计一个函数,可以将整形数组的次序调换例如:arr[5]={1,2,3,4,5},输出形式为:arr[5]={5,4,3,2,1}.案例代码://能否可以正常排序?#include<stdio.h>voidreverse(int*arr){ intlen=sizeof(arr)/sizeof(arr[0]); inttop......
  • oracle与sqlserver插入数据动态字段值
    记录一下以备下次快速找到。。。      往tb_wf_privgrant表中插入一条记录,workflow_id字段值从tb_wf_workflow表中获取workflow_name='知识审核'的所有记录中workflow_id最大值。--oracledeclare  aNUMBER(10);  begin  select max(workflow_id)intoafromt......
  • day1 - 数组part01
    力扣704.二分查找思路:假如有n个数,数组下标就是0到n-1,那么第一次从n/2开始找如果这个数比目标数大,说明目标数在左边,于是从0到中间边界找。如果这个数比目标数小,说明目标数在右边,于是从中间边界+1到n-1找。为了明确中间边界是多少,举个例子: 假如数组是:0,1,3,5,6,7,8;target......
  • 使用JavaScript计算两点经纬度之间的弧线点经纬度数组
    前言地球是一个近似于椭球体的三维物体,因此在计算两个经纬度点之间的距离时,不能简单地将其视为平面上的直线距离。相反,我们需要考虑地球的曲率,并使用球面三角法来计算两点之间的弧线距离及其中的插值点。通过本篇博客,我们将使用JavaScript来实现根据两个经纬度点返回两点之间的弧......
  • 【Leetcode刷题记录】1、统计参与通信的服务器;2、统计二叉树中好节点的数目;3、从两个
    1、统计参与通信的服务器题目:这里有一幅服务器分布图,服务器的位置标识在 m*n 的整数矩阵网格 grid 中,1表示单元格上有服务器,0表示没有。如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。请你统计并返回能够与至少一台其他服务器进行通信的服务器的......
  • 数组转树
    constlist=[{id:1,name:'部门1',pid:0},{id:2,name:'部门1-1',pid:1},{id:3,name:'部门1-2',pid:1},{id:4,name:'部门1-1-1',pid:2},{id:5,name:'部门1-2-1',pid:3},{id:6,name:&#......