Dp通用套路(闫式)

news2025/5/11 1:20:01

闫式dp分析法:

从集合角度来分析DP问题。

核心思想:

DP是一种求有限集中的最值或者个数问题

由于集合中元素的数量都是指数级别的,直接用定义去求,把每种方案都用dfs暴力枚举一遍,时间复杂度很高,此时用DP问题去优化。

DP 优化两个阶段(核心思想)

 动态规划解题步骤

步骤一:确定集合以及集合的属性

将问题看成一个集合,按照上述集合划分依据,分成若干不同子集。

按照属性定义状态,例如用 f[i] 表示考虑前 i 个元素时的某种最优解或状态。

​步骤二: 状态计算

找出状态之间的关系,即状态转移方程。这个方程描述了如何从已知子集的解构建出整个集合的解。​

步骤三:确定初始值

确定基本情况或边界条件。这些是状态转移方程中无法通过递推得到,需要直接给出的值。有时候可以直接将f数组定义为全局数组,则数组的元素会被默认初始化为0。​

例如f[0] = 0 ,表示容量为0时的最大价值为0。​

步骤四:输出结果

根据问题的要求,输出最终结果。在很多情况下,最终结果存储在 f[n] 中,其中 n 是问题的规模。​

eg:01背包问题

分析:

从2的n次方个方案中,找到总价值最大的方案,即有限集合中的最值问题,用闫式DP分析法来做。

分别求出左边的最大值,右边集合的最大值,两边取max,就是f(i,j) 的值

左边=f(i-1,j)

右边:每个方案都包含i,不变,要想值最大,需要前面变化的(1~i-1)部分最大

朴素代码

 优化空间后的代码

DP问题所有的优化都是对代码做等价变形

等价变形过程如下

 由上图分析可得,与原方程不等价。为了使之等价,可以将内层倒序循环(由大到小循环),这样fj会比这件f(j-vi)先更新,那么此时用到的j-vi一定是上一层的,即第i-1层。

继续优化,删掉恒等式f[j]=f[j]等得到优化结果

注意:

必须保证代码优化后是等价的 

内层循环:遍历每个可能的容量是为了计算在不同容量限制下的最大价值,确保我们考虑了所有可能的容量。因为在考虑第i个物品是否放入背包的时候,我们需要用当前背包的容量减去第i个物品的体积,而第i个物品的体积是任意的,因此我们需要考虑第i个物品在所有可能的容量限制下的最大价值,从而能够通过比较放入和不放入当前物品时的价值计算出在每个容量下的最大价值。

eg2:完全背包

闫式DP分析问题

 朴素代码

优化空间后的代码

按照01背包问题的方法做等价变形过程如下

 如图,恰好等价

继续优化,删掉恒等式f[j]=f[j],将判断条件放到内层循环初始化里,因为不满足这个条件的部分会被直接跳过。

得到代码

两个问题状态转移方程如下

eg3:石子合并(区间DP问题)

分析

第一次可以选择合并的堆数是n-1,因为一共有n排,选择的相邻堆一共n-1种选法。第二次合并的时候,就剩下n-1堆,相邻两堆的个数只剩下了n-2,所以第二次合并的时候只剩下了n-2种选法,以此类推,所有不同的合并顺序一共有(n-1)!种。

满足有限集,方案很多,可以考虑DP

由分析可知,最后合并的时候一定是把左边的某一段和右边的某一段合并,因此可以分界点作为划分的依据,具体来说可以以左半边连续一段的最后一堆,如上图,最后一堆可以在第i个位置,以此类推。但至少要有两堆,所以左边这一堆最大到j-1,因此可以分成上面的j-i类。

现在只要把每一类求出来取一个min,即每个子集的min,再从这些min中取出一个最小值,就是整个集合的最小值。

最终的f[i][j]枚举k,从i到j-1 ,在里面取一个min即可。

代码

区间dp问题:先枚举区间长度,再枚举区间左端点,若区间长度为1,不用合并,所以从长度2开始枚举。

因为要在区间长度一定的情况下,在同一[i,j]区间枚举所有k的可能取值中最f[i][j]的最小值,可以先让f[i][j]等于一个正无穷,然后再枚举k

f[i][j]含义:所有将[i,j]区间合并成一堆的方案的集合中的最小值。

总体思想:把这一排石子看成一个集合,然后枚举所有可能的区间当成一个子集。在每个区间中把石子分成左右两堆,K为左右两堆的分界点,每一次枚举k,都要更新当前区间合并石子的最小值。最终根据f数组的含义,f[1][n]即为答案。

eg3:最长公共子序列

子串要求连续,子序列只要求相对顺序。

一个长度为n的序列,据每个数是在或不在这个子序列两种情况,所以一共有2的n次方个不同的子序列。暴力枚举一定会超时,所以用dp来做。

分析

按照最后一个不同点划分:第一个字符串的最后一个字符a[i]是否包含在这个子序列里,第二个字符串的最后一个字b[j]是否包含在这个字序列里来划分。a[i]和b[j]是否包含各有两种选择,所以一共是四种选择。用0表示不包含,1表示包含,前面的代表a[i],后面的代表b[j],四种情况如上图

对于11这种情况,只有a[i]=b[j]时才存在

对于01这种情况,f(i-1, j) 不一定会存在 bj,但已经考虑了含概 bj 可能中的最大值,虽然不含 ai 和 bj 已经在 00 中考虑了,这里就是重复,求最大最小值,重复考虑是没问题的,但是求和的时候不能重复考虑。

同理,对于10这种情况,重复考虑也是没问题。

f[i][j]含义:所有序列a[1~i]与序列b[1~j]的公共子序列的集合中,最长公共子序列的长度。

因此,f[n][m]即为最终答案。

代码

最后

我们要相信科学,不要相信玄学。

如果上述解释有不对的地方,欢迎大家指正

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

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

相关文章

华为设备端口隔离

端口隔离的理论与配置指南 一、端口隔离的理论 基本概念 端口隔离(Port Isolation)是一种在交换机上实现的安全功能,用于限制同一VLAN内指定端口间的二层通信。被隔离的端口之间无法直接通信,但可通过上行端口访问公共资源&#…

RabbitMq(尚硅谷)

RabbitMq 1.RabbitMq异步调用 2.work模型 3.Fanout交换机(广播模式) 4.Diret交换机(直连) 5.Topic交换机(主题交换机,通过路由匹配) 6.Headers交换机(头交换机) 6…

GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab)

GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab) 目录 GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab)效果一览基本描述程序设计参考资料 效果一览 基本描述 本研究提出的GA…

数据分析怎么做?高效的数据分析方法有哪些?

目录 一、数据分析的对象和目的 (一)数据分析的常见对象 (二)数据分析的目的 二、数据分析怎么做? (一)明确问题 (二)收集数据 (三)清洗和…

stm32之TIM定时中断详解

目录 1.引入1.1 简介1.2 类型1.2.1 基本定时器1.2.2 通用定时器1. 触发控制单元 (Trigger Control Unit)2. 输入捕获单元 (Input Capture Unit)3. 输出比较单元 (Output Compare Unit)4. CNT 计数器5. 自动重装载寄存器 (ARR)6. 预分频器 (PSC)7. 中断与 DMA 事件8. 刹车功能 (…

【el-admin】el-admin关联数据字典

数据字典使用 一、新增数据字典1、新增【图书状态】和【图书类型】数据字典2、编辑字典值 二、代码生成配置1、表单设置2、关联字典3、验证关联数据字典 三、查询操作1、模糊查询2、按类别查询(下拉框) 四、数据校验 一、新增数据字典 1、新增【图书状态…

【LUT技术专题】ECLUT代码解读

目录 原文概要 1. 训练 2. 转表 3. 测试 本文是对ECLUT技术的代码解读,原文解读请看ECLUT。 原文概要 ECLUT通过EC模块增大网络感受野,提升超分效果,实现SRLUT的改进,主要是2个创新点: 提出了一个扩展卷积&…

大物重修之浅显知识点

第一章 质点运动学 例1 知识点公式如下: 例2 例3 例4 例5 例6 第四章 刚体的转动 例1 例2 例3 例4 例5 例6 第五章 简谐振动 例1 例2 例3 第六章 机械波 第八章 热力学基础 第九章 静电场 第十一章 恒定磁场…

并发设计模式实战系列(16):屏障(Barrier)

🌟 大家好,我是摘星! 🌟 今天为大家带来的是并发设计模式实战系列,第十六章屏障(Barrier),废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 屏障的同步机制 2. 关键参数 二…

算法探秘:和为K的子数组问题解析

算法探秘:和为K的子数组问题解析 一、引言 在算法的奇妙世界里,数组相关的问题总是层出不穷。“和为K的子数组”问题,看似简单,实则蕴含着丰富的算法思想和技巧。它要求我们在给定的整数数组中,找出和为特定值K的子数组个数。通过深入研究这个问题,我们不仅能提升对数组…

电力MOSFET的专用集成驱动电路IR2233

IR2233是IR2133/IR2233/IR2235 系列驱动芯片中的一种,是专为高电压、高速度的电力MOSFET和IGBT驱动而设计的。该系列驱动芯片内部集成了互相独立的三组板桥驱动电路,可对上下桥臂提供死区时间,特别适合于三相电源变换等方面的应用。其内部集成了独立的运算放大器可通过外部桥…

Qt 的原理及使用(1)——qt的背景及安装

1. Qt 背景介绍 1.1 什么是 Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形 界⾯所需的所有功能。它是完全⾯向对象的,很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模 式,开发者可以通过简单的拖拽…

范式之殇-关系代数与参照完整性在 Web 后台的落寞

最近参加了一个PostgreSQL相关的茶会,感慨良多。原本话题是PostgreSQL 在 SELECT 场景中凭借其成熟的查询优化器、丰富的功能特性和灵活的执行策略,展现出显著优势。在窗口函数(Window Functions)、JOIN 优化、公共表表达式&#…

广西某建筑用花岗岩矿自动化监测

1. 项目简介 某矿业有限公司成立于2021年,是由某建筑材料有限公司与个人共同出资成立,矿区面积0.4069平方公里,可开采筑用花岗岩、建筑用砂岩。建筑用花岗岩、建筑用砂岩可利用资源量分别为6338.69万吨、303.39万吨,设计生产规模…

想更好应对突发网络与业务问题?需要一款“全流量”工具

目录 什么是“全流量”? 为什么“全流量”在突发问题中如此重要? 1. 抓住问题发生的“第一现场” 2. 绕开日志盲区 3. 精准应对安全威胁 实战场景下的“全流量”价值体现 实施“全流量”需要注意哪些点? 1. 数据量巨大,需…

C#里创建一个MaterialDesign3的导航条

本文里主要创建如下的窗口: 在这里就是实现左边的导航窗口的列表。 第一步先要定义下面的代码: <Window x:Class="MDIXWindow.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microso…

Oracle OCP认证考试考点详解083系列09

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 41. 第41题&#xff1a; 题目 解析及答案&#xff1a; 关于应用程序容器&#xff0c;以下哪三项是正确的&#xff1f; A) 它可以包含单个…

如何进行室内VR全景拍摄?

如何进行室内VR全景拍摄&#xff1f; 室内VR全景拍摄作为先进的视觉技术&#xff0c;能够为用户提供沉浸式的空间体验。本文介绍如何进行室内VR全景拍摄&#xff0c;并阐述众趣科技在这一领域的技术支持和服务优势。 室内VR全景拍摄基础 1. 室内VR全景拍摄概述 室内VR全景拍…

C# 综合示例 库存管理系统20 操作员管理(FormAdmin)

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 图99A-35 操作员管理窗口设计 增加操作员或者重置密码&#xff0c;密码都设置为默认的“123456”&#xff0c;操作员可以登录系统后再修…

[JAVAEE]HTTP协议(2.0)

响应报文格式 响应报文格式由首行&#xff0c;响应头&#xff08;header&#xff09;&#xff0c;空行&#xff0c;正文&#xff08;body&#xff09; 组成 响应报文首行包括 1.版本号 如HTTP/1.1 2.状态码(如200) 描述了请求的结果 3.状态码描述(如OK) 首行——状态码…