首页 技术 正文
技术 2022年11月10日
0 收藏 474 点赞 3,496 浏览 1032 个字

这是一种DP状态设计方法。

有些题,当你必须以一个顺序往后填的话,然而后面的填法会对之前产生影响,那么,不妨在之前就对未来怎么填做出承诺。

通俗的讲,就是对未来打一个表。

然后后面填的时候,直接查表转移。

当然,毕竟也是一个打表,所以既要记录前面信息,又要记录后面的承诺,复杂度是比较高的。要看数据范围支不支持了。

状态经常设计成,前i个,填了….,如果后面填….的话,答案会是多少。

一、

序列上的一个比较经典的题:[CTSC2017]吉夫特

方法类似这一篇中的第一个例题:根号算法——暴力美学

结合了对未来承诺和对前几个数信息的存储的方法。

甚至直接暴力折半处理,真的是天工开物。

二、

对未来的承诺的问题,常见于树形dp

因为:

树形dp有种逆向思维的感觉。

虽然我是正着填,但是我会先预处理到终点的填法,也就是倒着先把子树的情况处理出来。

类似记忆化搜索的思想。

枚举怎么填x,处理子树接下来的填法。前提是状态固定,子树填法也固定。

而一般的线性dp,先处理的就是先填的。树形dp是,先处理的其实是后填的。

那么至于什么时候树形dp要对未来做出承诺,

感觉是,

如果状态限制只和x的子树有关的话,那么直接dp

如果和x的祖先还有关系,那么直接dp的话,x的填法还会影响到x子树的答案,就有后效性了。

而且,我们的树形dp其实是先搜出来子树怎么怎么填的方案,再考虑x怎么填,然后从子树中查找后续的填法。

所以,子树的填法对未来做出承诺的话,那么处理合并转移的时候就方便了。

例题:

经典:[IOI2005]River 河流

这个题祖先建不建伐木场会影响子树,并且要先决策子树,但是伐木场要往上游走。

就是明显的对未来做出承诺了。

以及:基础dp例题整理

这个中的“小凸玩密室”

填完了子树后,不知道最后一个填的是哪一个,所以不知道填祖先怎么处理花费。

枚举最后一个花销太大。

一个点儿子很多,但是祖先很少啊!!!

那么,干脆就钦定最后一个,在那里贡献答案。

但是不知道到时候祖先是哪一个?

祖先只有logn个!!

所以直接作出承诺。

不光是祖先的填法会影响子树答案,甚至整个树的填法顺序就不是一般的树形dp

填完了子树再填父亲23333~~

还有这个题:11.6 模拟赛T2

可以比较两种对未来承诺的设计复杂度不同的原因。

发现,对于树形dp对未来做出承诺,

就是因为祖先的填法会影响子树答案。

而不是子树单一成一个子问题。

所以要有一些“牵连”

那么,也许DP的设计可以分成两大块了。

1.前i个填,保留前面的信息

2.前i个填,打表对未来的承诺。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,817
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,900