动态规划(路径问题)

62. 不同路径

62. 不同路径 - 力扣(LeetCode)

动态规划思想第一步:描述状态~

dp[i][j]:表示走到i,j位置时,一共有多少种方法~

动态规划思想第二步:状态转移方程~

动态规划思想第三步:初始化(考虑边界情况)~

我们通过扩充数组大小可以节省初始化步骤,不过需要注意下标映射关系~

动态规划思想第四步:返回值~

return dp[m][n]

代码

//62 不同路径
class Solution
{
public:
    int uniquePaths(int m, int n)
    {
        //创建dp表(注意扩充)
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));

        //细节处理
        dp[0][1] = 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][n];
    }
};

其实动态规划核心就在于初始化和状态转移方程,之所以初始化主要考虑的就是填表边界情况,把特殊情况考虑了才方便让dp表一次到位。而状态转移方程尤其需要注意最近一步,一定得分析是如何到这一步的~

63. 不同路径 II

63. 不同路径 II - 力扣(LeetCode)

其实本道题跟上一道一样,唯一要注意的就是判定有无障碍物挡路~

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();

        vector<vector<int>> dp(m+1,vector<int> (n+1));
        dp[0][1] = 1;
        for(int i = 1;i<=m;i++)
        {
            for(int j = 1;j<=n;j++)
            {
                //小细节:dp表与原数组是对应不上的 
                if(obstacleGrid[i-1][j-1]==0)
                {
                    dp[i][j] = dp[i-1][j]+dp[i][j-1];
                }
            }
        }
        return dp[m][n];
    }
};

代码就是在上一道题的基础上多了一步判断,由于我们的dp表与原数组不是同等大小了,所以要记得对应位置的映射。

LCR 166. 珠宝的最高价值

LCR 166. 珠宝的最高价值 - 力扣(LeetCode)

也练习挺多道的了,这道题甚至感觉不用画图,就照着前面的套路添加一个判断大小即可~ 


class Solution {
public:
    int jewelleryValue(vector<vector<int>>& nums) {
        //小case,直接秒杀
        int m = nums.size();
        int n = nums[0].size();

        vector<vector<int>> dp(m+1,vector<int>(n+1));


        for(int i = 1;i<=m;i++)
        {
            for(int j = 1;j<=n;j++)
            {
                dp[i][j] = nums[i-1][j-1]+max(dp[i-1][j],dp[i][j-1]);
            }
        }

        return dp[m][n];
    }
};

 931. 下降路径最小和

931. 下降路径最小和 - 力扣(LeetCode)


class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        int m = matrix.size();

        vector<vector<int>> dp(m+1,vector<int>(m+2,INT_MAX));

        for(int i = 0;i<=m+1;i++)
        {
            dp[0][i] = 0;
        }

        for(int i = 1;i<=m;i++)
        {
            for(int j = 1;j<=m;j++)
            {
                dp[i][j] = min(dp[i-1][j],min(dp[i-1][j-1],dp[i-1][j+1]))+matrix[i-1][j-1];
            }
        }
        int ret = INT_MAX;
        for(int i = 1;i<=m;i++)
        {
            ret = min(ret,dp[m][i]);
        }
        return ret;


    }
};

64. 最小路径和

64. 最小路径和 - 力扣(LeetCode)

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        //秒杀,分析越来越快了~
        int m = grid.size();
        int n = grid[0].size();

        vector<vector<int>> dp(m+1,vector<int>(n+1,INT_MAX));
        
        dp[0][1] = 0;

        for(int i = 1;i<=m;i++)
        {
            for(int j = 1;j<=n;j++)
            {
                dp[i][j] = min(dp[i][j-1],dp[i-1][j])+grid[i-1][j-1];
            }
        }

        return dp[m][n];

    }
};

174. 地下城游戏

174. 地下城游戏 - 力扣(LeetCode)

class Solution {
public:
    int calculateMinimumHP(vector<vector<int>>& dungeon) {
        int m = dungeon.size();
        int n = dungeon[0].size();
        vector<vector<int>> dp(m+1,vector(n+1,INT_MAX));
        dp[m][n-1] = dp[m-1][n] = 1;

        for(int i = m-1;i>=0;i--)
        {
            for(int j = n-1;j>=0;j--)
            {
                dp[i][j] = min(dp[i+1][j],dp[i][j+1])-dungeon[i][j];
                dp[i][j] = max(1,dp[i][j]);
            }
        }
        
        return dp[0][0];
    }
};

感觉讲得还不够好,不够详细,后面再作改善~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958317.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue + element-ui 组件样式缺失导致没有效果

失效 代码&#xff1a; 修改方法&#xff1a; 在main.js文件里面加上&#xff1a; import element-ui/lib/theme-chalk/index.css; 最后&#xff1a;

Go 切片:用法和本质

要想更好的了解一个知识点&#xff0c;实战是最好的经历。 题目 我这里放一道题目&#xff1a; package mainimport "fmt"func SliceRise(s []int) {s append(s, 0)for i : range s {s[i]}fmt.Println(s) }func SlicePrint() {s1 : []int{1, 2}s2 : s1s2 append…

Spring MVC:设置响应

目录 引言 1. 返回静态页面 1.1 Spring 默认扫描路径 1.2 RestController 1.2.1 Controller > 返回页面 1.2.2 ResponseBody 2. 返回 HTML 2.1 RequestMapping 2.1.1 produces(修改响应的 Content-Type) 2.1.2 其他属性 3. 返回 JSON 4. 设置状态码 4.1 HttpSer…

基于Spark的共享单车数据存储系统的设计与实现_springboot+vue

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

在Unity中使用大模型进行离线语音识别

文章目录 1、Vosk下载下载vosk-untiy-asr下载模型在项目中使用语音转文字音频转文字2、whisper下载下载unity项目下载模型在unity中使用1、Vosk 下载 下载vosk-untiy-asr Github链接:https://github.com/alphacep/vosk-unity-asr 进不去Github的可以用网盘 夸克网盘链接:h…

【计算机网络】- 应用层HTTP协议

目录 初识HTTP 什么是HTTP 版本 HTTPS 模型 HTTP抓包工具 为什么使用 抓包工具的下载 下载后的重要操作 Fiddler的使用 HTTP请求与响应的基本格式 HTTP请求基本格式​编辑 HTTP响应基本格式 协议格式总结❗️❗️❗️​编辑 HTTP 详解 认识 URL URL基本格式 …

记一次IDOR 和访问控制缺失漏洞挖掘

视频教程在我主页简介和专栏里 测试 IDOR&#xff08;不安全的直接对象引用&#xff09; 漏洞时&#xff0c;我会使用一系列工具&#xff0c;确保不会遗漏任何问题。以下是我的测试方法&#xff1a; 设置 Firefox 和 Pwnfox&#xff1a; 1、我使用 Firefox 浏览器&#xff0c…

GS论文阅读--Hard Gaussian Splatting

前言 本文也是对高斯点云的分布进行优化的&#xff0c;看&#xff01; 文章目录 前言1.背景介绍2.关键内容2.1 位置梯度驱动HGS2.2 渲染误差引导HGS 3.文章贡献 1.背景介绍 在训练过程中&#xff0c;它严重依赖于视图空间位置梯度的平均幅度来增长高斯以减少渲染损失。然而&…

JS基础-操作数组(7)

一.增删改查 1.改 重新赋值 2.增 arr.puch() 末尾追加 arr.unshift() 开头追加 a)案例&#xff1a;数组筛选 3.删除 arr.pop() 删除最后一个元素 arr.shift() 删除第一个元素 splice&#xff08;&#xff09; 删除指定元素

C++otlv4连接sql serveer使用记录(注意点)

C使用otlv4在做插入时&#xff0c;有一些设计的坑需要注意 插入数据&#xff1a; 当要给表中插入单个字符时&#xff0c;数据库表设计使用varchar(1)是合理的&#xff0c;但是otlv4一直报错char。 后续查很久才知道&#xff0c;otlv4所写的绑定的字符数组的长度应该实际数组…

Chapter 6.5-Adding a classification head

Chapter 6 -Fine-tuning for classification 6.5-Adding a classification head 为进行分类微调&#xff0c;须修改预训练的大语言模型&#xff08;LLM&#xff09;。我们将原本把隐藏表征映射到含50,257个词的词表的输出层&#xff0c;替换为一个更小、仅映射到 “0&#xff…

洛谷题目 P1006 [NOIP2008 提高组] 传纸条 题解 (本题较难)

题目传送门&#xff1a; P1006 [NOIP2008 提高组] 传纸条 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言&#xff1a; 本题来源于2008年NOIp 提高组竞赛题目&#xff1a;传纸条&#xff0c;本题涉及到动态DP、图论里的费用流知识点&#xff0c;学过图论的都应该对这道题…

智能电动汽车 --- 人工智能(AI)入门

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

VUE之路由Props、replace、编程式路由导航、重定向

目录 1、路由_props的配置 2、路由_replaces属性 3、编程式路由导航 4、路由重定向 1、路由_props的配置 1&#xff09;第一种写法&#xff0c;将路由收到的所有params参数作为props传给路由组件 只能适用于params参数 // 创建一个路由器&#xff0c;并暴露出去// 第一步…

VS C++ 配置OPENCV环境

VS C 配置OPENCV环境 1.下载opencv2.安装环境3.opencv环境4.VS配置opencv环境5.EXE执行文件路径的环境lib和dll需要根据是debug还是release环境来区分使用哪个 6.Windows环境 1.下载opencv 链接: link 2.安装环境 双击运行即可 3.opencv环境 include文件路径:opencv\build\…

【Redis】持久化机制

目录 前言&#xff1a; RDB 触发RDB持久化方法有俩种&#xff1a; 1.手动触发 2.自动触发 RDB文件的优缺点&#xff1a; AOF: AOF工作机制&#xff1a;​编辑 ​编辑重写机制&#xff1a; 前言&#xff1a; Redis是一个内存数据库&#xff0c;将数据存储在内存中&…

蓝桥杯lesson3---string的使用

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” string的概念 string字符串是一种更加高级的封装&#xff0c;string字符串中包含了大量的方法&#xff0c;这些方法使得字符串的操作变得更加简单&#xff0c;string的使用&…

Arduino D1 通过 Wi-Fi 控制 LED

Arduino D1 通过 Wi-Fi 控制 LED 硬件连接 将 LED 的正极&#xff08;长脚&#xff09;连接到 Arduino D1 的 D1 引脚。将 LED 的负极&#xff08;短脚&#xff09;通过一个电阻&#xff08;例如 220 欧姆&#xff09;连接到 Arduino D1 的 GND 引脚。 安装必要的库 在 Ard…

大模型 / 智能体在智能运维领域的应用总结与发展趋势概述

智能体 智能运维 &#xff1f; 回顾大模型的发展 大模型的发展在过去两年间呈现出爆炸式的增长&#xff0c;成为推动人工智能领域快速进步的关键力量。 2023年3月&#xff1a;百度发布了其知识增强的大语言模型产品“文心一言”&#xff0c;这标志着国内AI大模型产业竞争的…

Unity中在UI上画线

在UI中画一条曲线 我封装了一个组件,可以实现基本的画线需求. 效果 按住鼠标左键随手一画. 用起来也很简单,将组件挂到空物体上就行了,红色的背景是Panel. 你可以将该组件理解为一个Image,只不过形状更灵活一些罢了,所以它要放在下面的层级(不然可能会被挡住). 代码 可以…