[学习笔记]对未来做出承诺的DP小结
这是一种DP状态设计方法。
有些题,当你必须以一个顺序往后填的话,然而后面的填法会对之前产生影响,那么,不妨在之前就对未来怎么填做出承诺。
通俗的讲,就是对未来打一个表。
然后后面填的时候,直接查表转移。
当然,毕竟也是一个打表,所以既要记录前面信息,又要记录后面的承诺,复杂度是比较高的。要看数据范围支不支持了。
状态经常设计成,前i个,填了....,如果后面填....的话,答案会是多少。
一、
序列上的一个比较经典的题:[CTSC2017]吉夫特
方法类似这一篇中的第一个例题:根号算法——暴力美学
结合了对未来承诺和对前几个数信息的存储的方法。
甚至直接暴力折半处理,真的是天工开物。
二、
对未来的承诺的问题,常见于树形dp
因为:
树形dp有种逆向思维的感觉。
虽然我是正着填,但是我会先预处理到终点的填法,也就是倒着先把子树的情况处理出来。
类似记忆化搜索的思想。
枚举怎么填x,处理子树接下来的填法。前提是状态固定,子树填法也固定。
而一般的线性dp,先处理的就是先填的。树形dp是,先处理的其实是后填的。
那么至于什么时候树形dp要对未来做出承诺,
感觉是,
如果状态限制只和x的子树有关的话,那么直接dp
如果和x的祖先还有关系,那么直接dp的话,x的填法还会影响到x子树的答案,就有后效性了。
而且,我们的树形dp其实是先搜出来子树怎么怎么填的方案,再考虑x怎么填,然后从子树中查找后续的填法。
所以,子树的填法对未来做出承诺的话,那么处理合并转移的时候就方便了。
例题:
这个题祖先建不建伐木场会影响子树,并且要先决策子树,但是伐木场要往上游走。
就是明显的对未来做出承诺了。
以及:基础dp例题整理
这个中的“小凸玩密室”
填完了子树后,不知道最后一个填的是哪一个,所以不知道填祖先怎么处理花费。
枚举最后一个花销太大。
一个点儿子很多,但是祖先很少啊!!!
那么,干脆就钦定最后一个,在那里贡献答案。
但是不知道到时候祖先是哪一个?
祖先只有logn个!!
所以直接作出承诺。
不光是祖先的填法会影响子树答案,甚至整个树的填法顺序就不是一般的树形dp
填完了子树再填父亲23333~~
还有这个题:11.6 模拟赛T2
可以比较两种对未来承诺的设计复杂度不同的原因。
发现,对于树形dp对未来做出承诺,
就是因为祖先的填法会影响子树答案。
而不是子树单一成一个子问题。
所以要有一些“牵连”
那么,也许DP的设计可以分成两大块了。
1.前i个填,保留前面的信息
2.前i个填,打表对未来的承诺。
[学习笔记]对未来做出承诺的DP小结的更多相关文章
- 「学习笔记」动态规划 I『初识DP』
写在前面 注意:此文章仅供参考,如发现有误请及时告知. 更新日期:2018/3/16,2018/12/03 动态规划介绍 动态规划,简称DP(Dynamic Programming) 简介1 简介2 ...
- C++ 学习笔记(五)类的知识小结一(重载,友元函数,静态成员,new)
---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎 ...
- KVM虚拟化学习笔记系列文章列表(转)
Kernel-based Virtual Machine KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之k ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- kvm虚拟化学习笔记(二)之linux kvm虚拟机安装
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装
平时一直玩RHEL/CentOS/OEL系列的操作,玩虚拟化也是采这一类系统,kvm在RHEL6系列操作系统支持比较好,本文采用采用OEL6.3操作系统,网上所有文章都说KVM比xen简单,我怎么感觉 ...
- 【学习笔记】动态规划—斜率优化DP(超详细)
[学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...
- ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录
放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...
- 状压dp(状态压缩&&dp结合)学习笔记(持续更新)
嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的 ...
随机推荐
- SpringBoot学习(1)
springboot的自动配置功能,主要流程如下: 1 启动的时候加载我们的主配置类,也就是我们的入口类:从而开启我们的自动配置配置功能,这个是通过@EnableAutoConfiguration注解 ...
- 学习photoshop心得
简要的学习了ps的三大功能p图,抠图,作图, p图主要是学了换脸这一效果,用到套索工具,把范冰冰的脸接到郭德纲身上, 首先使用套索工具把脸圈起来 然后移动到 另一个人脸上 再然后混合图层,自动混合 差 ...
- struts2学习
struts2是一种基于mvc模式的轻量级web框架,它本质上相当于一个servlet,在mvc设计模式中,struts2作为控制器(Controller)来建立模型与视图的数据交互,struts2采 ...
- Xshell 清除历史记录方法
使用电脑久了,就会清理电脑,将一些历史记录清除,使得电脑可以运行的更快,Xshell也是同样的道理.本集小编就教大家如何清除xshell的历史记录. 如何清除历史记录: 1.打开xshell,然后点击 ...
- Mysql双主操作
MySQL双主(主主)架构方案 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果 ...
- FreeRTOS软件定时器的使用
先贴上一个创建的代码,先声明一个句柄 TimerHandle_t pump_wakeup_timer_handle = NULL; 创建定时器和启动定时器,第三个参数,pdFALSE是只定时一次,pd ...
- 环境变量 - JDK
Linux 1. 备份并编辑配置文件 # cp /etc/profile /etc/profile.bak # vi /etc/profile 2. 设置JDK环境变量 export JAVA_HOM ...
- 「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)
2018年11月30日更新,补充了一些思考. 题意(CodeForces 869C) 三堆点,每堆一种颜色:连接的要求是同色不能相邻或距离必须至少3.问对整个图有几种连接方法,对一个数取模. 解析 要 ...
- Qt QLabel 播放GIF动画
很久以前用过,不过慢慢的不用了,就慢慢的忘记了,今天拾起来,记录一下,以后用的时候可以翻一下 QLabel播放GIF动画其实很简单 第一步,需要包含头文件,Qt播放GIF动画,我使用的是QMovie类 ...
- 菜鸟级appium 必看
之所以写这个,因为太多新人,appium环境半天都搭建不好,版本问题,兼容问题等等. 自己的解决方案:1 官网下载nodejs,建议安装长期支持版 2 进入appium官网,点击下载,跳转到githu ...