树形dp-luogu1352 没有上司的舞会

 树形dp

实现     

     动态规划在树形结构上的实现:任选一个点作为根节点,从而定义出每个节点的深度和每个子树的根。设计算法时,一般以节点由深到浅(子树由小到大)的顺序作为dp阶段,通常采用递归实现。

状态表示

      第一维通常是节点编号(代表以该节点为根的子树)。对于每个节点x,先递归在它的每个子节点上进行dp,在回溯时,从子节点向x进行状态转移。

例题(luogu1352)树形dp-luogu1352 没有上司的舞会_第1张图片

思路

      以节点编号作为状态的第一维。我们需要在每棵子树递归完成时,分别保存根节点参加或不参加时整棵子树的最大快乐值,以满足最优子结构。《算法竞赛进阶指南》树形dp-luogu1352 没有上司的舞会_第2张图片

代码实现

树形dp-luogu1352 没有上司的舞会_第3张图片

树形dp-luogu1352 没有上司的舞会_第4张图片

总结下重要操作

1.熟练掌握vector(记得头文件)

2.一开始先找根,从根开始递归



你可能感兴趣的:(动态规划,落谷)