区间DP解析超详细版!!街边老奶奶也喜欢看的好博客

区间DP解析超详细版!!


在上章 背包 (<—点击传送)中我们讲到DP是一种记忆化搜索,需要状态的传递来达到更深层次的搜索。

价值与代价的组合嵌套成背包中状态,而区间DP,则是需要子区间的更迭,环环相扣由子区间之间的组合来组成父区间的值,通过级级解决区间的合并问题来得出最优值。

1. 概念入门


第一次接触区间DP是在和学长闲聊时被考到的

当时的问题是:
在一个环形操场上放着若干堆石子,定义代价是相邻两堆石子合并时的重量和,求合成一堆时的最小代价。

当时第一反应是用孤儿贪心思想。众所周知,贪心是保证当前抉择最优却无法保证整体策略最优

2. 线性石子归并


此题不适合入门学者,修改一下,线性石子归并(<—点击传送)

N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。

给一个 5 堆的样例:8 4 6 3 5

运用贪心(每次合并最小代价和的两堆),算出结果62,最优解是60

放弃贪心我们来学习区间DP吧!

规定:Q( a , b )代表从第 a 堆到第 b 堆的区间内合并的最小代价值。

用逆推思想,假设自己是上帝,知道如何组合去做到最优解:合并的最后一定是两堆相合,设为 堆a 和 堆b,知晓最优的 a,b 就可以推出答案; 那么 堆a/堆b 也是两堆所和,设为 堆c和堆d/堆e和堆f,知晓…

发现问题开始递成一个个子问题,和DP思想逐渐吻合。

并且分区到最底层一定是 Q( n , n ), 即某一堆的石子量,是我们已知的条件。

大区间包含小区间,我们解决了小区间才能解决大区间。我们 跑遍一个区间的所有可能组合

例如:Q( 1 , 5 ) = min { Q(1,1)+Q(2,5), Q(1,2)+Q(3,5), Q(1,3)+Q(4,5), Q(1,4)+Q(5,5) }

就可以取出这个区间的最优组合,知晓这个区间的最优解。

在 for 循环中的最外层放置L(length),使得小区间会在大区间之前被处理完

区间左端为 i ,右端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值