• 树形dp总结


    转自 http://blog.csdn.net/angon823

    介绍

    1、什么是树型动态规划 

    顾名思义,树型动态规划就是在“树”的数据结构上的动态规划,平时作的动态规划都是线性的或者是建立在图上的,线性的动态规划有二种方向既向前和向后,相应的线性的动态规划有二种方法既顺推与逆推,而树型动态规划是建立在树上的,所以也相应的有二个方向: 

        1、叶->根:在回溯的时候从叶子节点往上更新信息

        2、根 - >叶:往往是在从叶往根dfs一遍之后(相当于预处理),再重新往下获取最后的答案。

        不管是 从叶->根 还是 从 根 - >叶,两者都是根据需要采用,没有好坏高低之分。

    2、树形动态规划的优美之处

    树真的是一种特别特别优美的结构!用来做动态规划也简直是锦上添花再美不过的事,因为树本身至少就有“子结构”性质(树和子树);也本身就具有递归性。所以在树上DP其实是其所当然的事,相比线性动态规划来讲,转移方程更直观,更易理解。

    3、难点

       1、和线性动态规划相比,树形DP往往是要利用递归的,所以对递归不熟悉的同学,是一道小小的障碍,说是小小的,因为要去理解也不难。
       2、细节多,较为复杂的树形DP,从子树,从父亲,从兄弟……已经一些小的要处理的地方,脑子不清晰的时候做起来颇为恶心
       3、状态表示和转移方程,也是真正难的地方。做到后面,树形DP的老套路都也就那么多,难的还是怎么能想出转移方程,状压DP、概率DP这些特别的DP应该说做到最后都是这样!

    4、补充

       建有向图还是无向图? 一般来说我们做树DP都是从上往下递归,如果不乱搞是不会从子节点往根节点的遍历的,这时候可以建有向图,只加边一次就可以,对于有“思想洁癖”的人来说,如果加一次边就可以再让他加两次是很难受的。但是有些题目可能很隐蔽的某个地方涉及到从子节点往上访问,就会错的很惨。所以,一般不非常确定建有向图就可的话还是建无向图吧。

    正文

    暂时分入门,一般、难三个等级,而不分类别。以后做的题目多了再改。

    1、入门题

    1、HDU 1520 Anniversary party 子节点和父亲节点不能同时选,问最大价值。题解
    2、HDU 2196 Computer 求树上每个点能到达的最远距离  题解

    2、一般

    1、D. Choosing Capital for Treeland 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到u去,则要逆转该边方向)题解
    2、Godfather  求树的重心(删除该点后子树最大的最小)题解
    3、POJ 3107 Tree Cutting  求删除哪点后子树最的小于等于节点总数的一半 题解
    4、POJ 3140 Contestants Division 删除某边后剩余两个分支差值最小是多少 题解

    3、难

    1、HDU 3586 Information Disturbing 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超过上限limit,问在保证总费用<=m下的最小的limit。题解
    2、POJ 3162 Walking Race  一棵n个节点的树。wc爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要在这n个距离里取连续的若干天,使得这些天里最大距离和最小距离的差小于M,问怎么取使得天数最多?题解
    3、HDU 5834 Magic boy Bi Luo with his excited tree 每个节点有一个价值Vi,每走一次一条边要花费Ci,问从各个节点出发最多能收获多少价值 题解
    4、POJ 2152 Fire n个节点组成的树,要在树一些点上建立消防站,每个点建站都有个cost[i],每个点如果不在当前的点上建站,也要依赖其他的消防站,并且距离不超过limit[i]。求符合上述条件的最小费用建站方案 题解
    5、POJ 1741 Tree 求树上距离小于等于K的点对有多少个 题解
     
     
  • 相关阅读:
    十一、 Façade外观(结构型模式)
    十七、 Mediator 中介者(行为型模式)
    十三、 Proxy代理(结构型模式)
    也谈.net平台的委托扩展篇
    也谈.net平台的委托基本篇
    十六、 Interpreter 解释器(行为型模式)
    十四、 Template Method模板方法(行为型模式)
    十八、 Iterator 迭代器(行为型模式)
    十五、 Command 命令(行为型模式)
    十二、 Flyweight享元(结构型模式)
  • 原文地址:https://www.cnblogs.com/stranger-/p/7704074.html
Copyright © 2020-2023  润新知