这是一种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个填,打表对未来的承诺。

[学习笔记]对未来做出承诺的DP小结的更多相关文章

  1. 「学习笔记」动态规划 I『初识DP』

    写在前面 注意:此文章仅供参考,如发现有误请及时告知. 更新日期:2018/3/16,2018/12/03 动态规划介绍 动态规划,简称DP(Dynamic Programming) 简介1 简介2 ...

  2. C++ 学习笔记(五)类的知识小结一(重载,友元函数,静态成员,new)

    ---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎 ...

  3. KVM虚拟化学习笔记系列文章列表(转)

    Kernel-based Virtual Machine KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之k ...

  4. kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  5. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  6. kvm虚拟化学习笔记(一)之kvm虚拟化环境安装

    平时一直玩RHEL/CentOS/OEL系列的操作,玩虚拟化也是采这一类系统,kvm在RHEL6系列操作系统支持比较好,本文采用采用OEL6.3操作系统,网上所有文章都说KVM比xen简单,我怎么感觉 ...

  7. 【学习笔记】动态规划—斜率优化DP(超详细)

    [学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...

  8. ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

    放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...

  9. 状压dp(状态压缩&&dp结合)学习笔记(持续更新)

    嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的 ...

随机推荐

  1. C语言关于指针的注意事项

    一.指针的四个关键概念1.指针的类型2.指针指向的类型3.指针的值,也就是指针指向的地址4.指针自己所占用的内存空间注意:指针变量所存的内容就是内存的地址编号! 例如:int **pp = NULL; ...

  2. Python的scrapy之爬取51job网站的职位

    今天老师讲解了Python中的爬虫框架--scrapy,然后带领我们做了一个小爬虫--爬取51job网的职位信息,并且保存到数据库中 用的是Python3.6  pycharm编辑器 爬虫主体: im ...

  3. SIMD数据并行(一)——向量体系结构

    在计算机体系中,数据并行有两种实现路径:MIMD(Multiple Instruction Multiple Data,多指令流多数据流)和SIMD(Single Instruction Multip ...

  4. Python的类(二)

    一.类的重写 对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写.为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名.这样, Python将不会考虑这个父类方法,而只关注你 ...

  5. 【问题记录】Linux Python等交互式输入回退键出现 ^H^H

    执行:yum install readline readline-devel

  6. PowerPC为什么会没落,我自己的反思学习总结

    PowerPC为什么会没落? Intel通过酷睿,拉大优势,使得苹果抛弃PowerPC   PowerPC当年异常强大,曾经是Xbox的处理器,是Mac的处理器,占据了服务器的半壁江山:当时刚刚接触C ...

  7. vue2.0 $emit $on组件通信

    在vue1.0中父子组件通信使用$dispatch 和 $broadcast,但是在vue2.0中$dispatch 和 $broadcast 已经被弃用. 因为基于组件树结构的事件流方式实在是让人难 ...

  8. 《python核心编程第二版》第2章习题

    2-1 略 2-1 略 2-2 (a)打印 结果是9 (b)9 (c)一样 (d)略 (e)略 2-3 略 2-4 (a) # /usr/bin/pythonraw_input() (b) # /us ...

  9. 06-Mysql数据库----表的操作

    06-表的操作   本节掌握 存储引擎介绍(了解) 表的增删改查 一.存储引擎(了解) 前几节我们知道mysql中建立的库===>文件夹,库中的表====>文件 现实生活中我们用来存储数据 ...

  10. Spark集群管理器介绍

    Spark可以运行在各种集群管理器上,并通过集群管理器访问集群中的其他机器.Spark主要有三种集群管理器,如果只是想让spark运行起来,可以采用spark自带的独立集群管理器,采用独立部署的模式: ...