To_Heart—总结——树形DP
作为一名合格的 OIer ,一定要有自我总结的意识,一定要通过写博客的方式来验证自己的掌握程度
————沃.茨基硕德
今天,带大家来看一下树形DP
树形DP,顾名思义,则是在树上做D动态规划:
在树上设计动态规划算法时,一般就以节点从深到浅(子树从小到大)的顺序作为DP的阶段。DP的状态表示中,第一维通常是节点编号(代表以该节点为根的子树)。大多数时候,我们采用递归的方式实现树形动态规划。对于每个节点x,先递归在它的每个子节点上进行DP,在回溯时,从子节点向节点x进行状态转移。
废话有点多,因为这种定义性的问题十分抽象,所以咱们来点儿有实际意义的比如来些题
所以接下来,带大家看一些经典的应用:
1.最大独立子集
最大独立子集的定义是,对于一个树形结构,所有的孩子和他们的父亲存在排斥,也就是如果选取了某个节点,那么会导致不能选取这个节点的所有孩子节点。一般询问是要求给出当前这颗树的最大独立子集的大小(被选择的节点个数)。
例题;