二刷代码随想录——动态规划day53

文章目录

  • 前言
    • 动态规知识点
  • 动规五部曲
  • 一、1143. 最长公共子序列
  • 二、1035. 不相交的线
  • 三、53. 最大子数组和
  • 总结


前言

一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油!
二刷决定精刷了,于是参加了卡子哥的刷题班,训练营为期60天,我一定能坚持下去,迎来两个月后的脱变的,加油!
推荐一手卡子哥的刷题网站,感谢卡子哥。代码随想录

动态规知识点

终于来到了守关boss。。。

动态规划中每一个状态一定是由上一个状态推导出来的

动规是由前一个状态推导出来的,而贪心是局部直接选最优的。

动规五部曲

动态规划一般分为如下五步:

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组
        //1. 确定dp数组(dp table)以及下标的含义//2. 确定递推公式//3. dp数组如何初始化//4. 确定遍历顺序//5. 举例推导dp数组

解题时候多把dp数组打印出来,看看究竟是不是按照自己思路推导的。

写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍,心中有数,确定最后推出的是想要的结果。

然后再写代码,如果代码没通过就打印dp数组,看看是不是和自己预先推导的哪里不一样。

如果打印出来和自己预先模拟推导是一样的,那么就是自己的递归公式、初始化或者遍历顺序有问题了。

如果和自己预先模拟推导的不一样,那么就是代码实现细节有问题。

一、1143. 最长公共子序列

1143. 最长公共子序列
Note:仍然是子序列题目

class Solution {
public:int longestCommonSubsequence(string text1, string text2) {//1. 确定dp数组(dp table)以及下标的含义//dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));//2. 确定递推公式//相同:dp[i][j] = dp[i - 1][j - 1] + 1;//不同:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);//3. dp数组如何初始化//4. 确定遍历顺序for (int i = 1; i <= text1.size(); i++) {for (int j = 1; j <= text2.size(); j++) {if (text1[i - 1] == text2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}//5. 举例推导dp数组return dp[text1.size()][text2.size()];}
};

二、1035. 不相交的线

1035. 不相交的线
Note:看完解析才发现这题就在考两个字符串的最长公共子序列的长度

class Solution {
public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {//1. 确定dp数组(dp table)以及下标的含义//dp[i][j]:长度为[0, i - 1]的字符串nums1与长度为[0, j - 1]的字符串nums2的最长公共子序列为dp[i][j]vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));//2. 确定递推公式//相同:dp[i][j] = dp[i - 1][j - 1] + 1;//不同:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);//3. dp数组如何初始化//4. 确定遍历顺序for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}//5. 举例推导dp数组return dp[nums1.size()][nums2.size()];}
};

三、53. 最大子数组和

53. 最大子数组和
Note:利用动规解决

class Solution {
public:int maxSubArray(vector<int>& nums) {if (nums.size() == 0) return 0;//1. 确定dp数组(dp table)以及下标的含义//dp[i]:包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]。vector<int> dp(nums.size());//2. 确定递推公式//dp[i] = max(nums[i], dp[i - 1] + nums[i]);//3. dp数组如何初始化dp[0] = nums[0];int res = dp[0];//4. 确定遍历顺序for (int i = 1; i < nums.size(); i++) {dp[i] = max(nums[i], dp[i - 1] + nums[i]);res = dp[i] > res ? dp[i] : res;}//5. 举例推导dp数组return res;}
};

总结

动态规划法,和分治法极其相似。区别就是,在求解子问题时,会保存该子问题的解,后面的子问题求解时,可以直接拿来计算。

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

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

相关文章

SpringCloud面试题以及答案

1、SpringCloud是什么&#xff1f; 1、 Spring Cloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用SpringBoot的…

redis 常见的异常

目录 一、缓存穿透 1、概念 解决方案 &#xff08;1&#xff09;布隆过滤器 (2)、缓存空对象 二、缓存雪崩 1、概念 解决方案 &#xff08;1&#xff09;redis高可用 &#xff08;2&#xff09;限流降级 &#xff08;3&#xff09;数据预热 一、缓存穿透 1、概念 缓…

【Greenhills】GHS-MULTI IDE-Ubuntu纯命令系统部署license文件

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 记录在Ubuntu纯命令系统中部署license文件的步骤。 2、 问题场景 客户服务器为Linux纯命令行的环境&#xff0c;客户也无其他服务器可以部署&#xff0c;需在纯命令行上尝试安装。 3、软硬件环境 1&#xff09…

Windows系统部署eXtplorer文件管理器结合内网穿透构建私人云存储服务器

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件&#xff0c;是互联网最重要的应用之一&#xff0c;无论是…

8.测试教程-自动化测试selenium-3

文章目录 1.unittest框架解析2.批量执行脚本2.1构建测试套件2.2用例的执行顺序2.3忽略用例执行 3.unittest断言4.HTML报告生成5.异常捕捉与错误截图6.数据驱动 大家好&#xff0c;我是晓星航。今天为大家带来的是 自动化测试selenium第三节 相关的讲解&#xff01;&#x1f600…

镜像站汇总

软件镜像站 查看linux版本&#xff0c;常见有centos, ubuntu, Debian cat /etc/os-release去清华软件源帮助页面&#xff0c;查找对应源设置方案(需要结合具体的系统版本)&#xff0c;常用&#xff1a; Debian https://mirrors.tuna.tsinghua.edu.cn/help/debian/ 需要选则系…

ISIS邻居以及路由计算

ISIS报文细节&#xff0c;ISIS报文分为三个部分&#xff1a; 1、通用报文头 Intradomain Routeing Pro Dis&#xff1a;ISIS&#xff1a;域内路由协议鉴别符&#xff1a;0x83代表ISIS协议 Length Indicator&#xff1a;27 头部长度&#xff08;包含了通用头部和专用头部&…

【原创】三十分钟实时数据可视化网站前后端教程 Scrapy + Django + React 保姆级教程向

这个本来是想做视频的&#xff0c;所以是以讲稿的形式写的。最后没做视频&#xff0c;但是觉得这篇文还是值得记录一下。真的要多记录&#xff0c;不然一些不常用的东西即使做过几个月又有点陌生了。 文章目录 爬虫 SCRAPYxpath 后端 DJANGO前端 REACT Hello大家好这里是小鱼&a…

掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)

通道&#xff08;Channel&#xff09;是用来在 Go 程序中传递数据的一种数据结构。它是一种类型安全的、并发安全的、阻塞式的数据传输方式&#xff0c;用于在不同的 Go 协程之间传递消息。 基本概念 创建通道&#xff1a;使用make()函数创建一个通道。 ch : make(chan int)…

【spring】@Conditional注解学习

Conditional介绍 Conditional注解用于按照设定的条件进行判断&#xff0c;从而决定是否将某个bean注册到Spring容器中。 Conditional注解是在Spring 4.0版本中引入的&#xff0c;它提供了一种更加灵活的方式来控制bean的创建和注册。在此之前&#xff0c;开发者通常使用Profi…

Automated and Cooperative Vehicle Merging at Highway On-Ramps

论文解读——Automated and Cooperative Vehicle Merging at Highway On-Ramps 参考资料来源&#xff1a;《Automated and Cooperative Vehicle Merging at Highway On-Ramps》一文 1.问题描述 该文章想解决如FIG.1中的匝道合流问题&#xff0c;传统的匝道合理需要等待main r…

vue@2.7.16 使用less、less-loader

遇到问题&#xff0c;npm install less-loader7.3.0 --save安装好less-loader后&#xff0c;执行npm run serve 项目运行不起来&#xff0c;排查后发现在安装less-loader后就提示需要安装less&#xff0c;正确的安装应如下&#xff1a; npm install less less-loader7.3.0 --sa…

物联网应用技术中的stm32该怎么学,该从哪入手?

物联网应用技术中的stm32该怎么学&#xff0c;该从哪入手&#xff1f; STM32是只物联网中的一部分&#xff0c;单纯的学个STM32是没法满足物联网开发需求的&#xff0c;实际产品开发过程中会考虑成本等多种因素选择合适的方案&#xff0c;比如使用单片机还是stm32或是更高端的芯…

前端vue实现甘特图

1 什么是甘特图 甘特图(Gantt chart)又称为横道图、条状图(Bar chart)。以提出者亨利L甘特先生的名字命名&#xff0c;是项目管理、生产排程、节点管理中非常常见的一个功能。 甘特图内在思想简单&#xff0c;即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的…

將SqlServer表創建到hive腳本

將SqlServer表創建到hive腳本 sqlserver.java import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern;public class sqlserver {private static String[] deleteArrayNull(String string[]) {ArrayList<String> strList new A…

考研数学|《660》题这样刷,效率最高!

首先要了解一下660的难度&#xff0c;我认为660的难度是在基础和强化之间的一本习题册。具有一些比较好的选填题目&#xff0c;有些题目可能对初学者来说较为困难&#xff0c;尤其是一些包含二级结论的一些题目。但是对于强化阶段来说&#xff0c;这本题目可能难度较低了一些。…

基于springboot+vue的游戏交易系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

如何设计一个订单超过5分钟不支付就自动去掉订的设计?都有哪些方案?

实现订单在超过5分钟不支付就自动取消的功能&#xff0c;可以通过多种方案来设计。以下是一些常见的解决方案&#xff1a; 定时任务&#xff08;Cron Job&#xff09;&#xff1a; 创建一个定时任务&#xff0c;定期扫描数据库中创建时间超过5分钟且未支付的订单&#xff0c;然…

C语言学习 三、运算符与表达式

3.1 运算符分类 c语言提供了13种类型的运算符&#xff0c;如下所示&#xff1a; &#xff08;1&#xff09;算术运算符&#xff08; - * / %&#xff09; &#xff08;2&#xff09;关系运算符&#xff08;> < > < !&#xff09; &#xff08;3&#xff09;逻…

【职位管理】某大型能源化工企业职位管理体系搭建咨询项目

随着企业的发展&#xff0c;企业内部员工的数量不断增加。而管理职位的有限性使得员工的晋升出现“过独木桥”的现象&#xff0c;有些企业为了缓解这种问题&#xff0c;采取增设副职与助理岗位的办法&#xff0c;却导致组织机构迅速膨胀。那么&#xff0c;华恒智信专家是如何解…