动态规划专题第一章-第三章(坐标型、序列型、划分型)

前言

动态规划是我最爱的算法,没有之一

(1)确定状态
1.1 最后一步

1.2 子问题

(2)转移方程

(3)初始条件和边界

(4)计算顺序

什么样的问题可以考虑使用DP解决?
在这里插入图片描述

最值性动态规划

coin change

核心解题步骤:以coin change为例,也就是有2,5,7面值的硬币,数量不限,用最少的硬币拼出27
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过从最后一步进行反推,缩小问题规模,得到子问题,从而定义状态
在这里插入图片描述
还是从最后一步出发,通过带入具体的场景,具体的条件,写出状态转移方程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
状态转移方程不能覆盖的状态就需要提前给定
在这里插入图片描述
计算顺序的确定:当我们计算f[x]时,状态转移方程中用到的f[i]都必须已经得到结果

计数型动态规划

unique path

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何确定开几维数组???用几维数组的一个点表示状态???
A:看上图第三句话。这里没有出现专用术语,我想借用聚类算法中的说法。比如说,描述一个城市的发展状况,往往需要从多个维度去考虑,可以这样说,一个城市某一个发展状态是高维空间中的一个点,一个坐标。在这里,假设原问题是一个状态,这个状态也是高维空间中的一个坐标,这是在二维空间上的一个状态。不同的是,这个坐标被附加了一个值,可以说是权值,或者其他什么。这个权值和坐标有关系,权值是根据坐标计算而来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

存在型动态规划

jump game

在这里插入图片描述
在这里插入图片描述
第二个条件好判断,对于第一个条件,我们不清楚青蛙是否能调到石头i,于是需要判断是否可以调到i,子问题也就呼之欲出了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

坐标型动态规划

前言

在这里插入图片描述

坐标型dp总结

在这里插入图片描述

最长连续单调子序列

题面:
在这里插入图片描述
在这里插入图片描述

(1)确定状态
1.1 最后一步
在这里插入图片描述
特别关键的在于最后一句话,为什么是“以a[j-1]结尾”,而不是“到a[j-1]为止”

这个问题之前分析过,如果当作坐标型,确实可以覆盖所有情况,而序列型,划分型存在遗漏问题

可以这样想,对于最优情况,如果子序列长度大于1,那么一定是选择了a[i-1]元素,到a[i-1]为止不一定选择了a[i-1]

1.2 子问题
在这里插入图片描述

(2)转移方程
在这里插入图片描述

(3)初始条件和边界
在这里插入图片描述

(4)计算顺序

最小数字和路径

题面:
在这里插入图片描述
这也是一个最值型问题,但似乎也只是说可以考虑用DP来解决而已,并无法直接确定解决办法

(1)确定状态
1.1 最后一步在这里插入图片描述

1.2 子问题
在这里插入图片描述

(2)转移方程
在这里插入图片描述

(3)初始条件和边界
在这里插入图片描述

(4)计算顺序

炸弹能量(很有意思,出现了不同于以往的设置)

题面:
在这里插入图片描述
首先是做了一个用于简化问题的假设
在这里插入图片描述
并且先只考虑在一个方向上能炸死的敌人数量

(1)确定状态
1.1 最后一步
一般是通过最后一步反推来缩小问题规模,但似乎这个问题不好用最后一步

因为最后他只剩下一个坐标,又不是序列,也没有产生路径啥的,没法最后一步

1.2 子问题
在这里插入图片描述
这个子问题不好想,进而状态也是不好想的

(2)转移方程
在这里插入图片描述
从这里出发可以看到,上面之所以假设有敌人也能放炸弹,是为了能将值传下来。假设up[i-1]j是敌人,他不能放炸弹,根据状态的定义,那么up[i-1]j=0,可这并不代表up[i]j就是0啊,这样一来,就无法将更小规模问题的结果传递下来

对于墙,能放和不能放结果上等价,如果能放,操作就统一了

(3)初始条件和边界
在这里插入图片描述

(4)计算顺序
在这里插入图片描述

unique path2

题面:
在这里插入图片描述
解法:
(1)确定状态
1.1 最后一步

1.2 子问题

(2)转移方程

(3)初始条件和边界
在这里插入图片描述

(4)计算顺序

序列型动态规划

前言

在这里插入图片描述
序列型DP的重要变化:f[i]表示前i个元素,这与其他类型的DP有很大不同

best time to buy and sell stock(买卖股票的最好时间)

题面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个就没有用典型的最后一步来处理,也没有定义状态以及列出转移方程

解法:
(1)确定状态
1.1 最后一步

1.2 子问题

(2)转移方程

(3)初始条件和边界

(4)计算顺序

best time to buy and sell stock 2

题面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解法:
(1)确定状态
1.1 最后一步

1.2 子问题

(2)转移方程

(3)初始条件和边界

(4)计算顺序

best time to buy and sell stock3

题面:
在这里插入图片描述
在这里插入图片描述

1)确定状态
1.1 最后一步
在这里插入图片描述
你看哈,枚举的是最后一次卖,没有说具体第几次。题干中说了,最多进行两次交易
在这里插入图片描述
这样按阶段进行划分的好处是,如果没有交易,就停在阶段1;交易1次,停在阶段3;交易2次,停在阶段5. 如果你知道当前处在哪个阶段,你就知道当前是否可以进行交易
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 子问题
在这里插入图片描述

(2)转移方程
在这里插入图片描述
(3)初始条件和边界
在这里插入图片描述

(4)计算顺序

best time to buy and sell stock4

在这里插入图片描述
这个系列主要调整的就是K的值,可以根据K和N的相对关系对其进行简化
在这里插入图片描述
N/2不好理解,可以继续放大至N

house robber

题面:
在这里插入图片描述

解法:
(1)确定状态
1.1 最后一步
在这里插入图片描述

1.2 子问题
在这里插入图片描述

(2)转移方程
在这里插入图片描述

(3)初始条件和边界
简化状态的定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)计算顺序

house robber 2

题面:
在这里插入图片描述
和house robber相比,0和n-1相邻了。直觉来讲,边界这个位置需要单独考虑
在这里插入图片描述
在这里插入图片描述
就不考虑房子0
在这里插入图片描述

解法:
(1)确定状态
1.1 最后一步

1.2 子问题

(2)转移方程

(3)初始条件和边界

(4)计算顺序

paint house 2

题面:
在这里插入图片描述
唯一的区别在于之前只有三种颜色,但是现在有k中颜色可选

解法:
(1)确定状态
1.1 最后一步
在这里插入图片描述

1.2 子问题
在这里插入图片描述

(2)转移方程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(3)初始条件和边界

(4)计算顺序

counting bits

序列型 + 位操作

题面:
在这里插入图片描述
解法:
(1)确定状态
1.1 最后一步
在这里插入图片描述
这里的最后一步并不是典型的最后一步,所以不要拘泥于“最后一步”这种表述,核心是缩小问题规模
1.2 子问题
在这里插入图片描述

(2)转移方程
在这里插入图片描述

(3)初始条件和边界
在这里插入图片描述

(4)计算顺序

paint house

题面:
在这里插入图片描述
解法:
(1)确定状态
1.1 最后一步
在这里插入图片描述
在这里插入图片描述
如果能确定N-2存在哪几种可能就好了,那就记录下来
在这里插入图片描述

1.2 子问题
在这里插入图片描述
序列型在描述上和坐标型的区别:前者是以 前 i 种…这种形式来描述问题的

(2)转移方程
在这里插入图片描述
在这里插入图片描述
(3)初始条件和边界
在这里插入图片描述

(4)计算顺序

russian doll envelops (俄罗斯套娃)

在这里插入图片描述
序列的每一个元素都是二维信息,需要综合两个维度的信息来筛选
在这里插入图片描述
通常,要对信息进行降维,也就是一个维度一个维度的处理
在这里插入图片描述
最后一步,以某一个元素为结果序列的最后一个元素,同时对应的dp为符合题意的值,在这,就表示嵌套的信封个数
在这里插入图片描述
然后就可以确定状态,定义f[i]的含义
在这里插入图片描述
之后就可以定义状态转移方程
在这里插入图片描述
接着就是初始条件和边界的确定
在这里插入图片描述
请注意,以上只是对信封的长度做了DP,还有宽度需要考虑

宽度信息作为状态转移方程的判断条件了,用于判定当前信封是否可以装前一个信封

还需要注意,长度相等的两个信封应该怎么排序,需要交换位置吗?实际上,可以将宽度作为第二优先级条件做升序排列,即长度相等,则按宽度升序排列

划分型动态规划

decode ways

题面:
在这里插入图片描述

(1)确定状态
1.1 最后一步
在这里插入图片描述
注意上述例子,
假设最后一位被解析成B,假设前面有100中解密方式
假设最后一位被解析成L,假设前面有50中解密方式
那么一共有150种揭秘方法

1.2 子问题
在这里插入图片描述
从最后一步的例子来看,要么是1个数字字符被解析,要么是两个数字字符被解析
在这里插入图片描述

(2)转移方程
在这里插入图片描述
划分型和序列型在状态的描述上就比较像,都是前 i 个

(3)初始条件和边界
在这里插入图片描述
如果说把状态定义成坐标型,光是初始条件这儿就要分情况处理

(4)计算顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值