动态规划的技巧

news2024/10/6 1:37:05

以下是我的个人刷题经验,请大家谨慎采纳,如有疑问或认为不对的,欢迎评论和讨论。

1. 在dp里使用辅助位置

有时候边界条件要特殊考虑,比较麻烦,为了简化对边界条件的处理,可以适当增加辅助位置。

1. 1. 相关题目

72. 编辑距离:

dp[i][j]表示word1的0~i位到word2的0~j位的最小编辑距离,则dp[i][j]与dp的[i-1]和[j-1]相关。

当i或j等于0的时候,就需要特殊处理,不然[i-1]或[j-1]就数组越界了(小于0)。

考虑在word1和word2前加一个空白字符,然后人为规定(当然要具体推断一下)这个空白字符位置的具体dp值,就可以统一用dp[i][j]与dp的[i-1]和[j-1]相关来递推了。

2. 猜到填充dp数组的方向

考察dp相关的暴力递归最后返回时行列的值,就可以猜到dp的迭代方向是从左到右还是从右到左,从上到下还是从下到上。

dp相关的暴力递归,一般会有形如func(i,j,p1,p2...)的递归函数,而调用该递归的主函数,最后返回的一般是这种递归函数的结果。

比如:

main(){
    // ......各种代码
    return func(a.len()-1, b.len()-1);
}

那dp大概率就是i从0到a.len()、j从0到b.len()来填满。

再如:

main(){
    // ......各种代码
    return func(0, b.len()-1);
}

那dp大概率就是i从a.len() 到0、j从0到b.len()来填满。

为啥会有这个经验?因为最后返回的dp结果,一定是”最后“得到的,那它的反方向,就是最先”开始“的,从”开始“到”结果“,就知道方向了。

注意:

动态规划的返回值一般有两种形式,返回某种数量、返回某种列表。

3. 题目给的问题,一般就是dp的含义

因为题目给的问题,就是没有后效性的,不然答案就不是确定的(不同的解题方法有不同的答案)。

注意,题目一般不会把dp各个维度的定义给出来,只是一个方向性的定义。

3.1. 相关题目

  • 72. 编辑距离

题目

返回将word1转换成word2所使用的最少操作数

dp的设计

从word1到word2,那就是2维dp了,直接设dp[i][j]就是“word1的i转换成word2的j所使用的最少操作数”,至于“word1的i”代表什么?就需要再想一想。很自然想到3个方向:

  1. word1的第i位:word1[i]
  2. word1的前i位:word1[0]~word1[i]
  3. word1的后i位:word1[i]~word1[len-1]

很容易排除掉1、3两种情况,那就是2了,最终题解也是用的2

4. 想办法隔离后效性

4.1. 相关题目

  • 312.戳气球

题目是要求能获得硬币的最大数量,根据上面的”题目给的问题,一般就是dp的含义“这个经验,可以有以下几种候选的dp定义思路:

  1. 前i个球爆完后,再爆剩下的球,所能得到的最大数量
  2. 后i个球爆完后,再爆剩下的球,所能得到的最大数量
  3. 第i个球是第一个爆的球的情况下,所能得到的最大数量
  4. 第i个球是最后一个爆的球的情况下,所能得到的最大数量

所有思路都涉及到某个球爆了后,把区间分成左右两边,但左边的爆炸会影响到右边,比如下图所示的5个球

球的值

11

12

13

14

15

球的序号i

1

2

3

4

5

序号i=3爆了,区域分成左(1、2)和右(4、5)两块:左边的1先爆,右边4、5爆的时候最多乘以一个左边界的2;如果左边的2先爆,右边4、5爆的时候最多乘以的就是左边界的1了。

除非左右边界搁一个不会爆的东西,让它把两边隔离开来,两边的边界都不会超过它,左右边界就不会互相影响了。

考察上文的4个思路,只有第4个具有这种隔离的特点,所以最终用4作为dp的定义思路。

5. dp数组的大小一般不会超过3维

如果自己想到的dp超过了3维(一般是通过暴力优化到dp的时候出现的),那大概率思路错了,就算好不容易写出来,在leetcode上大概率也会超时。

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

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

相关文章

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+

时间序列在回归预测的领域的重要性,不言而喻,在数学建模中使用及其频繁,但是你真的了解ARIMA、AR、MA么?ACF图你会看么?? 时间序列数据如何构造???,我打过不少…

提升客户满意度,数字化售后工单系统的实施策略

售后工单系统助企业优化运营,提升客户满意度。涵盖技术支持、维修服务、客户反馈管理等应用场景。ZohoDesk凭高效定制成企业首选。未来趋势包括AI、物联网、AR/VR技术集成,提升服务智能化水平。 一、售后工单系统的重要性 售后工单系统是企业用来管理和…

基于Java的GeoTools对Shapefile文件属性信息深度解析

目录 前言 一、Shapefile的属性列表信息 1、属性表格信息 2、属性表格包含的要素 二、GeoTools对属性表格的解析 1、常规解析方法 2、基于dbf文件的属性信息读取 三、总结 前言 ESRI Shapefile(shp),或简称shapefile,是美…

SQL优化 - 排序

文章目录 排序和索引降序索引 FilesortORDER BY 顺序问题ORDER BY LIMIT 排序和索引 如果ORDER BY操作使用了索引,那么就可以避免排序操作,因为索引本身就是按索引 key 排好序的。那什么情况下,ORDER BY会走索引呢? 例如&#…

专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结

目录 搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度优先遍历 vs 宽度优先搜索 vs 暴搜 1.深度优先遍历 vs 深度优先搜索(dfs) 2.宽度优先遍历 vs 宽度优先搜索(bfs) 2.关系图暴力枚举一遍所有的情况 3.拓展搜索问题全排列 决策树 1. 计算布尔⼆叉树的值(medi…

CF2013E Prefix GCD

【题目大意】 给定一个长度为 n n n 的数列 a 1 … n a_{1 \dots n} a1…n​,你可以将 a 1 … n a_{1 \dots n} a1…n​ 按照任意顺序进行重排,使得: ∑ i 1 n gcd ⁡ { a 1 , a 2 , a 3 , … , a n } \sum\limits_{i1}^{n}\gcd\left \{…

10.5学习

1.GateWay GateWay⽬标是取代Netflflix Zuul,它基于Spring5.0SpringBoot2.0WebFlux等技术开发,提供统⼀的路由⽅式(反向代理)并且基于 Filter(定义过滤器对请求过滤,完成⼀些功能) 链的⽅式提供了⽹关基本的功能&…

探索 Python 虚拟环境的奥秘:virtualenv 的魔法世界

文章目录 探索 Python 虚拟环境的奥秘:virtualenv 的魔法世界背景:为何选择 virtualenv?虚拟环境的守护者:virtualenv 是什么?安装 virtualenv:简单几步,开启隔离之旅掌握 virtualenv 的基本用法…

Relu激活

ReLU(Rectified Linear Unit)激活函数 是卷积神经网络(CNN)以及许多深度学习模型中最常用的激活函数之一。它的主要作用是引入非线性,使模型能够学习和表达更复杂的特征。以下是对ReLU激活函数的详细解释。 1. ReLU的…

C语言进阶版第16课—自定义类型:结构体

文章目录 1. 结构体类型的声明和初始化2. 结构体自引用3. 结构体内存对齐3.1 结构体内存对齐规则3.2 修改默认对齐数 4. 结构体传参4. 结构体实现位段5. 位段使用的注意事项 1. 结构体类型的声明和初始化 结构体在使用之前都要对其类型进行声明,关键字是struct&…

15分钟学 Python 第36天 :Python 爬虫入门(二)

Python 爬虫入门:环境准备 在进行Python爬虫的学习和实践之前,首先需要准备好合适的开发环境。本节将详细介绍Python环境的安装、必要库的配置、以及常用工具的使用,为后续的爬虫编写奠定坚实的基础。 1. 环境准备概述 1.1 为什么环境准备…

mp4转gif在线转换怎么转?7个视频转动图方法不容错过!(超简单)

mp4转gif在线转换怎么转?如今,将mp4视频转换为gif动图格式,满足了人们对易于分享和网络传播内容的需求。与mp4视频相比,gif动图文件体积相对较小,几乎所有网络平台都支持这种格式,无需额外安装插件或软件。…

CSID-GAN:基于生成对抗网络的定制风格室内平面设计框架论文阅读

CSID-GAN: A Customized Style Interior Floor Plan Design Framework Based on Generative Adversarial Network 摘要前言II. CSID-GAN METHODA. Overall FrameworkB. Algorithm and Loss Function III. DATASETS AND EVALUATION METRICSA. DatasetsB. Evaluation Metrics IV.…

信息安全工程师(34)访问控制模型

前言 访问控制模型是实现访问控制的基础,不同的访问控制模型提供了不同的访问控制策略和机制,以适应不同的安全需求。 一、自主访问控制模型(DAC) 定义:指资源的所有者有权决定谁可以访问其资源以及访问的方式。资源的…

如何实现事件流操作

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了通道相关的内容,本章回中将介绍StreamProvider组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在Flutter中Stream是经常使用的组件,对该组件的监听可void main() {///让状态栏和程序的appBar融为一体…

macos安装mongodb

文章目录 说明安装和配置安装mongodb配置PATH变量 验证日志及数据存放目录 mac启动和关闭mongodb后台启动失败问题mongodb-compass(GUI) 说明 Homebrew core 列表目前已经将 MongoDB 移除,不再为其提供支持。但是使用国内镜像的brew还是可以安装的!这里直接从官网下…

使用 Python 代码连接 PostgreSQL

Python 是一个功能非常强大的编程语言,尤其在与数据库交互时,提供了丰富的解决方案。在实际项目中,我们经常需要通过 Python 连接并操作数据库。为了简化这种操作,ORM(对象关系映射)框架提供了便利。ORM 能…

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容: 使用AWS CLI配置密钥对创建ec2 server使用drawio(vscode插件)进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台,可以提供ec2,vpc,SNS以及clo…

灵足时代:具身智能核心部件的新秀崛起——解析数千万元天使轮融资

在智能科技日新月异的今天,具身智能作为连接物理世界与数字世界的重要桥梁,正逐步成为科技创新的前沿阵地。近日,具身智能核心部件领域的新锐公司——“灵足时代”宣布完成数千万元天使轮融资,这一消息无疑为行业内外带来了强烈的震撼与期待。本轮融资由雅瑞智友科学家基金…

多用户网页聊天室(测试报告)

一、项目背景 随着现代互联网的快速发展,实时通信系统(如聊天应用)已成为人们日常交流的重要工具。多用户网页聊天室项目旨在为用户提供一个基于Web的实时聊天平台,支持用户之间的即时通信、好友管理和历史消息记录查看。为了提升…