树形dp+dp总结(待续)

最近学了一下树形dp。
主要做过:树形背包,树上路径,点覆盖,最大独立集,支配集这几类树形dp的题。
总的来说,树形dp因为是树,子问题特别明显,可以在dfs时直接考虑如何转移,具体题目还是具体分析。
有时转移会具有后效性,但可以通过其他方式消除(支配集就是一个很好的例子),有关树形dp的一些博客题解放在了前面,这篇就到这吧。
最后心得:其实关于dp都是这样,一般从状态或者从决策入手,有时也可以从转移入手,或者分析到问题解的可能性,从子问题入手。具体问题还是需要具体分析,对于区间dp而言就很容易从状态和决策想到转移方程。
一般来说一道dp题可能并不好想出它的转移方程,这时候要勇于尝试状态,对决策进行分析,验证转移方程的正确性。即使转移状态具有后效性,通常也可以通过增加维数记录其他状态或者其他统计手段消除后效性得到解。因此dp类问题最重要的还是要敢想敢试,多做dp题也可以增加思维和分析问题的能力(因为经常要对问题的性质和决策可能性,状态进行分析,即使不是一道dp题,这些思考过程对于最后得出正解也是非常重要的)。

最后提一下dp类问题那三个重要的点:重叠子问题,无后效性,最优子结构。
最优子结构其实是涉及到一个转移的问题,我们的转移由子问题而来,子问题必须是最优解我们才可能得到这个问题的最优解。或者说这个问题如果有最优解,那么它的子问题一定是最优解(因为转移要用到子问题的解,如果子问题都不是最优解那转移过来的更大规模的问题肯定也不是最优解了)。

重叠子问题是dp问题的一个基本要求,如果分析到一道题有大量的重叠子问题要 处理,很可能要用到dp(dp的本质其实就是记录子问题的解,避免大量重复计算,如果完全没有重叠子问题,那么就没有重复计算的地方,那么dp是没有优势的,这时候还不如考虑分治或其他算法)

无后效性:简单的说当前得到的状态,已经和过去没有关系,可以当成一个黑盒,用来更新下一个状态,而不用考虑这个状态是怎么得到的,这就是无后效性,如果一个状态转移,转移的时候需要考虑到得到子状态的过程,那么就是有后效性,有后效性不代表这题不能用dp解(曾经我的一个误区),后效性是可以消除的,用dp解的基本条件是重叠子问题,而不是后效性。例如:台阶问题,每一步只能上1个或者2个台阶,某一个台阶坏掉了,不能走,问到第n个台阶有几种走法。如果状态数只有一维,我们并不直到前面的状态有没有踩过坏掉的那一阶,这是转移就有后效性,解决方法可以是再加一维标记是否踩过那一阶。

(最后的最后):dp是讲不完的,但是一些基础的dp还是很重要的:这里列举一下(01背包,完全背包,多重背包,分组背包,LIS(以及nlogn解法),DAG最长路)等等,背包问题主要是刚开始学dp的时候引入的一个多阶段决策的思维(从决策方式思考可以自己想到)。
这篇就到此先结束了吧,后续再更新dp的心得。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值