C++算法第十一天

本篇文章我们继续学习动态规划

目录

第一题

题目链接

题目解析

代码原理

代码编写

第二题

题目链接

题目解析

代码原理

代码编写

第三题

题目链接

题目解析

代码原理

代码编写

第四题

题目链接

题目解析

代码原理

代码编写

第五题

题目链接

题目解析

代码原理

代码编写

题后总结


第一题

题目链接

题目解析

代码原理

代码编写

class Solution {

public:

    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {

        int m = obstacleGrid.size(), n = obstacleGrid[0].size();

        //建表

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

        //初始化

        dp[0][1] = 1;//当然这里dp[1][0] = 1也是可以的

        //填表

        for(int i = 1; i <= m; i++)

        {

            for(int j = 1; j <= n; j++)

            {

                //状态转移方程

                if(obstacleGrid[i - 1][j - 1] == 0)

                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];

            }

        }

        return dp[m][n];

    }

};

第二题

题目链接

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

题目解析

代码原理

代码编写

class Solution {

public:

    int jewelleryValue(vector<vector<int>>& frame) {

        int m = frame.size(), n = frame[0].size();

        //建表

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

        //初始化

        dp[0][1] = 0;

        //填表

        for(int i = 1; i <= m; i++)

        {

            for(int j = 1; j <= n; j++)

            {

                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + frame[i - 1][j - 1];

            }

        }

        return dp[m][n];

    }

};

第三题

题目链接

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

题目解析

代码原理

代码编写

class Solution {

public:

    int minFallingPathSum(vector<vector<int>>& matrix) {

        int n = matrix.size();

        //建表

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

        //初始化第一行

        for(int j = 0; j < n + 2; j++)

        {

            dp[0][j] = 0;

        }

        //填表

        for(int i = 1; i < n + 1; i++)

        {

            for(int j = 1; j <= n; j++)

            {

                dp[i][j] = min(min(dp[i - 1][j - 1], dp[i - 1][j]),dp[i - 1][j + 1]) + matrix[i - 1][j - 1];

            }

        }

        int ret = INT_MAX;

        for(int j = 1; j <= n; j++)

        {

            ret = min(ret, dp[n][j]);

        }

        return ret;

    }

};

第四题

题目链接

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

题目解析

代码原理

代码编写

class Solution {

public:

    int minPathSum(vector<vector<int>>& grid) {

        int m = grid.size(), 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 - 1][j],dp[i][j - 1]) + grid[i - 1][j - 1];

            }

        }

        return dp[m][n];

    }

};

第五题

题目链接

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

题目解析

代码原理

这里的状态方程有个小错误需要注意一下,正确的我放在下面啦,别看漏哦

正确的状态转移方程:dp[i][j] = min(dp[i][j + 1],dp[i + 1][j]) - cur[i][j]

代码编写

class Solution {

public:

    int calculateMinimumHP(vector<vector<int>>& dungeon) {

        int m = dungeon.size(),n = dungeon[0].size();

        //建表

        vector<vector<int>> dp(m + 1, vector<int>(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][j + 1], dp[i + 1][j]) - dungeon[i][j];

                dp[i][j] = max(1,dp[i][j]);

            }

        }

        return dp[0][0];

    }

};

题后总结

通过今天的题,我们可以总结出以下几点

1.填表时需要使用原表上的数据时,行列各减1

2.初始化部分的目的:保证填表时不越界

                                  保证填表时后面的数据正确

3.如何正确初始化:结合状态表示和状态转移方程,进行分析哪些地方存在越界的可能性

那么本篇文章的内容就先到此结束,我们下期文章再见!!!

记得一键三联哦

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[x86 ubuntu22.04]投影模式选择“只使用外部”,外部edp屏幕无背光

1 问题描述 CPU&#xff1a;G6900E OS&#xff1a;ubuntu22.04 Kernel&#xff1a;6.8.0-49-generic 系统下有两个一样的 edp 屏幕&#xff0c;投影模式选择“只使用外部”&#xff0c;内部 edp 屏幕灭&#xff0c;外部 edp 屏幕无背光。DP-1 是外部 edp 屏幕&#xff0c;eDP-1…

【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?

要在 Windows 上编译 etcd 及 etcdctl 工具&#xff0c;并使用 bat 脚本启动 etcd 集群&#xff0c;首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤&#xff1a; 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…

34. Three.js案例-创建球体与模糊阴影

34. Three.js案例-创建球体与模糊阴影 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它负责将场景中的对象绘制到画布上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersObject可选参数对象&#xff0c;包…

从源码分析swift GCD_DispatchGroup

前言&#xff1a; 最近在写需求的时候用到了DispatchGroup&#xff0c;一直没有深入去学习&#xff0c;既然遇到了那么就总结下吧。。。。 基本介绍&#xff1a; 任务组&#xff08;DispatchGroup&#xff09; DispatchGroup 可以将多个任务组合在一起并且监听它们的完成状态。…

深度神经网络(DNN)在时序预测中的应用与缺陷

目录 ​编辑 一、DNN在时序预测中的应用 二、DNN的缺陷 三、技术挑战与未来趋势 四、结论 随着大数据时代的到来&#xff0c;深度学习技术在时序预测领域扮演着越来越重要的角色。深度神经网络&#xff08;DNN&#xff09;因其强大的非线性拟合能力和自动特征提取能力&…

第十五章、职责链模式

第十五章、职责链模式 职责链可以是一条直线、一个环或者一个树形结构&#xff0c;最常见的职责链是直线型&#xff0c;即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者&#xff0c;职责链模式可以将请求的处理者组织成一条链&#xff0c;并使请求沿着链传递&a…

docker容器的安装以及用法

1、了解docker 1.1、docker是什么 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现…

springboot450房屋租赁管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统房屋租赁管理系统信息管理难度大&#xff0c;容错率低&am…

案例分享|企查查的数据降本增效之路

分享嘉宾 任何强 企查查科技股份有限公司 大数据架构负责人 关于企查查 “企查查”是企查查科技股份有限公司旗下的一款企业信用查询工具。2023年5月20日&#xff0c;企查查正式发布全球首款商查大模型——“知彼阿尔法”&#xff0c;该模型基于企查查覆盖的全球企业信用数据进…

5G -- 5G网络架构

5G组网场景 从4G到5G的网络演进&#xff1a; 1、UE -> 4G基站 -> 4G核心网 * 部署初中期&#xff0c;利用存量网络&#xff0c;引入5G基站&#xff0c;4G与5G基站并存 2、UE -> (4G基站、5G基站) -> 4G核心网 * 部署中后期&#xff0c;引入5G核心网&am…

28. 描述符

一、什么是描述符 如果一个类中有如下 3 个方法中的任意一个&#xff0c;那么这个类创建的对象&#xff0c;可以称为 描述符对象。 object.__get__(self, instance, ownerNone) object.__set__(self, instance, value) object.__delete__(self, instance)如果有另外一个类&…

CVE-2024-32709 WordPress —— Recall 插件存在 SQL 注入漏洞

漏洞描述 WordPress 是一款免费开源的内容管理系统,适用于各类网站,包括个人博客、电子商务系统、企业网站。其插件 WP-Recall 的 account 存在 SQL 注入漏洞,攻击者可以通过该漏洞获取数据库敏感信息。 WP-Recall 版本 <= 16.26.5 漏洞复现 搭建环境、安装插件、完成…

Flink CDC实时同步mysql数据

官方参考资料&#xff1a; https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/mysql-cdc/ Apache Flink 的 Change Data Capture (CDC) 是一种用于捕获数据库变化&#xff08;如插入、更新和删除操作&#xff09;的技术。Flink CDC…

Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍

概述 伴随电子商务的持续演进&#xff0c;客户对于便利性、速度以及个性化服务的期许急剧攀升。企业务必要探寻创新之途径&#xff0c;以强化自身运营&#xff0c;并优化购物体验。达成此目标的最为行之有效的方式之一&#xff0c;便是将 AI 呼叫助手融入您的电子商务平台。我们…

二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片

选择金融领域的专业文档作为源文件 这里选择 《博金大模型挑战赛-金融千问14b数据集》&#xff0c;这个数据集包含若干公司的年报&#xff0c;我们将利用这个年报搭建金融问答机器人。 具体下载地址 这里 git clone https://www.modelscope.cn/datasets/BJQW14B/bs_challenge_…

maven使用Dependency-Check来扫描安全漏洞

在现代软件开发中&#xff0c;使用开源库和第三方依赖项已成为常态。然而&#xff0c;这些依赖项可能包含已知的安全漏洞&#xff0c;给应用程序带来潜在的风险。为了解决这个问题&#xff0c;OWASP Dependency-Check 应运而生。本文将介绍 OWASP Dependency-Check 的功能、安装…

meta-llama/Llama-3.2-1B 微调记录

踩坑&#xff1a; 1.刚开始部署在自己的windows电脑上&#xff0c;semgrep不支持windows &#xff0c;然后就换了linux服务器 2.服务器没有梯子&#xff0c;huggingface无法访问&#xff0c;模型数据集无法下载 解决方法&#xff1a; 使用huggingface镜像网站下载模型&#xf…

双指针---有效三角形的个数

这里写自定义目录标题 题目链接 [有效三角形的个数](https://leetcode.cn/problems/valid-triangle-number/description/)问题分析代码解决执行用时 题目链接 有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例…

《通信电子电路》入门手册

因为大学这门课好多同学理解不了这门课 于是考完试后花了两天时间整理了这份笔记&#xff0c;在这分享给完全没有学懂这门课的同学&#xff0c;也帮助“理解概念才能学得进去”的同学入门 笔记&#xff1a;通信电子电路 入门手册 —— flowus笔记 对应&#xff1a;《通信电子…

基于单片机的智能水表的设计

1总体设计 本次设计智能IC卡水表&#xff0c;在系统架构上设计如图2.1所示&#xff0c;由STM32F103单片机&#xff0c;YF-S401霍尔型传感器&#xff0c;RFID模块&#xff0c;OLED12864液晶,按键&#xff0c;继电器等构成&#xff0c;在功能上可以实现水流量的检测&#xff0c;…