【动态规划算法练习】day3

news2024/11/14 17:56:35

文章目录

  • 一、931. 下降路径最小和
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 二、64. 最小路径和
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 三、面试题 17.16. 按摩师
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 总结


一、931. 下降路径最小和

1.题目简介

931. 下降路径最小和
题目描述:
给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径的最小和 。
下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1) 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.解题思路

这道题要求下降路径的最小和,即从第一行到最后一行的所有路径的最小和。
根据动态规划的五步解题思路:
在这里插入图片描述

3.代码

具体代码如下(C++):

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        vector<int> v(matrix[0].size(), 0);
        vector<vector<int>> dp(matrix.size(), v);
        for(int j = 0;j < matrix[0].size(); ++j)
        {
            dp[0][j] = matrix[0][j];
        }
        for(int i = 1;i < matrix.size(); ++i)
        {
            for(int j = 0;j < matrix[0].size(); ++j)
            {
                if(j == 0)
                {
                    dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + 1]) + matrix[i][j];
                }
                else if(j == (matrix[0].size() - 1))
                {
                    dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1]) + matrix[i][j];
                }
                else
                {
                    dp[i][j] = min(min(dp[i - 1][j], dp[i - 1][j - 1]), dp[i - 1][j + 1]) + matrix[i][j];
                }
            }
        }
        int ret = INT_MAX;
        for(int j = 0;j < matrix[0].size(); ++j)
        {
            ret = min(ret, dp[matrix.size() - 1][j]);
            cout<<j<<":"<<dp[matrix.size() - 1][j]<<endl;
        }
        return ret;
    }
};

4.运行结果

在这里插入图片描述

二、64. 最小路径和

1.题目简介

64. 最小路径和
题目描述:
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
在这里插入图片描述
在这里插入图片描述

2.解题思路

这道题要求最小路径和,可以化简为求从左上角到路径中某个格子的最小路径和,然后再计算从左下角到右下角的最小路径和。
根据动态规划的五步解题思路:
在这里插入图片描述

3.代码

具体代码如下(C++):

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        vector<int> v(grid[0].size(), 0);
        vector<vector<int>> dp(grid.size(), v);
        dp[0][0] = grid[0][0];
        for(int j = 1;j < grid[0].size(); ++j)
        {
            dp[0][j] = dp[0][j - 1] + grid[0][j];
        }
        for(int i = 1;i < grid.size(); ++i)
        {
            dp[i][0] = dp[i - 1][0] + grid[i][0];
        }
        for(int i = 1;i < grid.size(); ++i)
        {
            for(int j = 1;j < grid[0].size(); ++j)
            {
                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
            }
        }
        return dp[grid.size() - 1][grid[0].size() - 1];
    }
};

4.运行结果

在这里插入图片描述

三、面试题 17.16. 按摩师

1.题目简介

题目描述:
面试题 17.16. 按摩师
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
在这里插入图片描述

2.解题思路

这道题要求按摩师最大工作分钟数,可以计算每一个预约中按摩师接不接该预约的最大分钟数,然后最终计算所有的预约最大分钟数(根据具体情况,有时候不接当前预约反而可以获得更大的工作时间)
根据动态规划的五步解题思路:
在这里插入图片描述

3.代码

具体代码如下(C++):

class Solution {
public:
    int massage(vector<int>& nums) {
        if(nums.size() == 0) return 0;
        vector<int> v(2, 0);
        vector<vector<int>> dp(nums.size(), v);
        dp[0][0] = 0;
        dp[0][1] = nums[0];
        for(int i = 1;i < nums.size(); ++i)
        {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
            dp[i][1] = dp[i - 1][0] + nums[i];
        }
        return max(dp[nums.size() - 1][0], dp[nums.size() - 1][1]);
    }
};

4.运行结果

在这里插入图片描述


总结

今天是算法练习的第3天。
不积跬步,无以至千里;不积小流,无以成江海。继续加油!
如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!
文中练习到的所有题目均来源于Leetcode网站,大家可以去原网站进行练习(直接点击题目链接即可)。

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

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

相关文章

浅析 GeoServer CVE-2023-25157 SQL注入

原创稿件征集 邮箱&#xff1a;eduantvsion.com QQ&#xff1a;3200599554 黑客与极客相关&#xff0c;互联网安全领域里 的热点话题 漏洞、技术相关的调查或分析 稿件通过并发布还能收获 200-800元不等的稿酬 更多详情&#xff0c;点我查看&#xff01; 简介 GeoServer是一个开…

十八、网络基础(一)

一、协议 &#xff08;一&#xff09;前置 协议其实是一种约定&#xff01;&#xff01;&#xff01; 计算机之间的传输媒介是光信号和电信号 , 通过 " 频率 " 和 " 强弱 " 来表示 0 和 1 这样的信息 , 要想传递各种不同的信息 , 就需要约定好双方的数据…

(自己动手开发自己的语言练手级应用)JSON(JavaScript Object Notation) 产生式(BNF)

写自己的开发语言时&#xff0c;很多人都会拿JSON当第一个练习对象 开源net json FJSON 解析工具https://dbrwe.blog.csdn.net/article/details/107611540?spm1001.2014.3001.5502 <json> :: <object> | <array> <object> :: "{" [ <me…

分布式学习第三天 nginx学习

目录 1. 一些基本概念 1.1 Nginx初步认识 1.2 正向/反向代理 1.3 域名和IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 课外知识导读 1. URL和URI 2. DNS解析过程 复习 1. 一些基本概念 1.1 Nginx初步认识…

团体程序设计天梯赛-练习集L1篇②

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

在我掉入计算机的大坑并深陷其中时,一门名为“C语言”的编程语言让我沉迷

各位CSDN的uu们你们好呀&#xff0c;小雅兰好久没有更新博客啦&#xff0c;今天来小试牛刀&#xff01;&#xff01;&#xff01; 上一篇博客小雅兰是说自己原本是自动化专业的学生&#xff0c;但是因为一次偶然的机会对计算机的相关知识产生了浓厚的兴趣。那么&#xff0c;小雅…

Linux Ubuntu man文档的图文安装教程

文章目录 前言man文档的起源man文档的安装man文档的使用总结 前言 当提及"man文档"时&#xff0c;通常是指Unix和类Unix系统中的手册页&#xff08;man page&#xff09;&#xff0c;因为Linux是在Unix的基础上发展而来的操作系统&#xff0c;所以我们的Linux也有ma…

操作系统 - 内存管理

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

INDEMIND相机ROS bag包数据的回放

实验需要IMU相机&#xff0c;跑算法是在ROS下跑&#xff0c;在 ROS 系统中&#xff0c;可以使用 bag 文件来保存和恢复系统的运行状态&#xff0c;比如相机话题的 bag 包&#xff0c;然后回放用来进行联合外参标定&#xff0c;也可以使用EVO工具显示算法轨迹&#xff0c;这里记…

合宙Air724UG Cat.1模块硬件设计指南--GPIO控制

GPIO控制 简介 GPIO&#xff08;General-purpose input/output&#xff09;&#xff0c;通用型之输入输出的简称&#xff0c;可实现某时刻电平状态的输出与输入&#xff0c;即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 特性 共支持28个GPIO&a…

A Neural Conversational Model 读后感

目录 摘要 1、介绍 2、相关工作 3、模型 4、数据&#xff08;后面都是具体的东西&#xff0c;不赘述&#xff09; 5、总结 使用微软翻译得到的中文原文&#xff1a; 摘要 会话建模是自然语言理解和机器智能中的一项重要任务。尽管存在以前的方法&#xff0c;但它们通常仅…

MySQL数据库:数据库的约束以及数据的聚合、联合查询

目录 一.关系模型的简要概述 二.数据库的约束 2.1约束类型 2.2NULL约束 2.3 UNIQUE&#xff1a;唯一约束 2.4 默认约束 2.5 PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 …

Nginx热升级到1.23.4过程指导手册

一、问题描述 因环境内部安全扫描发现CVE-2021-23017、CVE-2022-41741、CVE-2022-41742、CVE-2019-20372漏洞&#xff0c;经分析后&#xff0c;需要将nginx升级到1.23.4版本&#xff1b; 现场环境&#xff1a;centos7.4 1708、nginx 1.20.1 资料&#xff1a;软件下载、360安全…

spring框架-循环依赖问题(二)

文章目录 什么是循环依赖解决循环依赖的办法知识扩展 什么是循环依赖 两个或多个类之间存在彼此依赖的情况,形成一个循环依赖链 代码&#xff1a; 单例bean的循环依赖&#xff1a; 先了解Bean的生命周期&#xff1a;1.实例化 2.初始化、3.使用 4.销毁 详细了解Bean生命周期…

数据库高级

数据库高级&#x1f985; 文章目录 数据库高级&#x1f985;范式&#x1f98d;什么是范式&#x1f40a;第一范式——1NF&#x1f996;第二范式——2NF&#x1f41f;第三范式——3NF&#x1f409;总结&#x1f419; 五大约束&#x1f40f;主键约束&#x1f421;外键约束&#x1…

第五章 ResNeXt网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

网络套接字函数 | socket、bind、listen、accept、connect

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

CSS3-补充-结构伪类选择器

结构伪类选择器 作用&#xff1a;在HTML中定位元素 优势&#xff1a;减少对于HTML中类的依赖&#xff0c;有利于保持代码整洁 场景&#xff1a;常用于查找某父级选择器中的子元素 选择器&#xff1a; 选择器 …

SAC算法小结

算法SAC 基于动态规划的贝尔曼方城如下所示&#xff1a; 则&#xff0c;基于最大熵的软贝尔曼方程可以描述为如下的形式&#xff1a; 可以这么理解soft贝尔曼方程&#xff0c;就是在原有的贝尔曼方程的基础上添加了一个熵项。 另外一个角度理解soft-贝尔曼方程&#xff1a; …

Vue-组件自定义事件(绑定和解绑)

组件自定义事件(绑定) 像click,change这些都是js的内置事件&#xff0c;我们可以直接使用&#xff0c;本次我们学习自己根据需求打造全新的事件&#xff0c;但是js内置的是给html元素用的,本次的自定义事件是给组件用的 注意&#xff1a;组件上也可以绑定原生DOM事件&#xf…