树形DP:
线性dp面对的问题一般为线性序列或图。
树上dp是一种在树状结构上进行dp的一种,各个阶段呈现树状关系的时候也可以采用树形dp。
树形dp过程:
1.如果问题是一棵隐性树(即不以树为直接背景),则需要将问题转化为一棵显性树,并存储各阶段的树状联系。
2.在树的数据结构上进行dp,但其求解方式与线性dp有所不同:
计算顺序不同。线性dp有两种方向,顺推与逆推;而树形dp也有两个方向。由根到叶的先根遍历,但不常用,一般我们采用由叶到根的后根遍历,即子节点将有用信息传给父节点,逐层上推,最终由根得出最优解。
计算方式不同. 线性的采用传统迭代,树形是用记忆化,用递归。
上例题:
P1352 没有上司的舞会:
题目描述
某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。