区间DP 再套个线段树框架,状态转移思路brilliant

Codeforces Good bye 2016

此题由于状态转移思路花了很久才弄明白,认为实在有必要记录下
题解链接:http://codeforces.com/blog/entry/49412

官网评论的思路说的很明白:
在这里插入图片描述
感想:这种转化为自动状态机的做题思路,实在可叹,可取。这才符合计算机专业的思维。动态规划的本质就是建立在这种状态的转移上,DP的思维就应该以状态机的方式去思考。
收获&思路:从数据范围来看一串digital number,长度最多到2e5,完全区间dp的话n^2的复杂度不可取,必须用线段树去维护区间,达到log级别的查询。但最核心的是,区间dp中的状态转移方程是什么。如上图,首先看达到2017这个子串,状态机是如何从没有最开始的没有2到最后的加上7这个状态转移的。我们设置m[5][5]维护的是当前这个区间,其中m[i][j]指的是从状态i到j需要删掉多少字符才能达到。这里的状态都是上图那个状态机的状态。那如何合并两个区间呢,两个区间中的m[i][j]可以由min(m[i][k]+m[k][j]) 其中k<=j,j>=i,比如某个区间从0到4状态要删掉多少字符,可以由某两个子区间从状态0到2,另一个从2到4转移得到,或者就是左子区间保持状态0要删的数加上右子区间从状态0到4要删的数。一个区间的从0到4的状态必须从左右子区间的这种状态转移得到,没有例外。所以可以动态规划。

他人代码链接:
https://www.cnblogs.com/heimao5027/p/6428216.html(代码好理解)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值