算法:动态规划

问题:

DP问题如何处理负数

子数组和为m,能否利用DP解决?前缀?

什么是DP

Dynamic Process(DP)是指满足最优子结构、无后效性、和有重叠子问题三个性质的求得最优解的方法。有重叠子问题不是DP的必要条件,但如果不具备的话,会使得DP在解决问题的时候丢失优势。DP是求解决策过程最优化的方法,决策过程就是可能分成多个阶段的。

  1. 最优子结构:问题是由多阶段构成,每个阶段的最优解会推到出整个问题的最优解
  2. 无后效性:后面的计算结果和决策不会影响之前阶段的决策
  3. 有重叠子问题:子问题之间不是独立的。这点和分治算法是不一样的,分治思想下的子问题是互相独立的,然后合成大问题的解。

简单直白的解释:之前计算的需要存储、不管以后怎么样当前就是最好的、每个阶段的状态算出来就不变了。

动态规划问题的关键步骤

以下没有标准答案,需要每题单独分析。

  1. 确定阶段
  2. 确定各个阶段的状态:这里的状态可以考虑和题目的要求匹配,例如题目是最大组合数,那状态就是在阶段i的最大组合数:cnt,如果题目是是否可以,那状态也是是否可以:true or false
  3. 确定各状态之间的转移方程(也就是递推关系)

后面各阶段解释比较有帮助

背包问题

如何利用倒叙和一维数组降低只需要最后解(例如最大价值)的算法空间复杂度。

正序计算会导致后面计算出错,每次更新都是利用上一行楼上和前面的value计算,所以采用倒序方法,这个就是计算优化技巧了,和算法本身的思路无关。

状态转移表建议多算算,会有一些算法的启发和确定自己是否真的理解了需要解决的问题。

原始的dp方程可以多

👉🏻 这个解题思路讲的很透彻with some flaws

👉🏻 背包问题使用一维数组时为什么要倒序

👉🏻 环形偷盗问题为什么可以分解为两个单排偷盗的问题,因为特殊case互相包容了

需要注意的是,如果数组中存在负数的情况该怎么办呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值