[算法总结] 树形DP

听起来蛮高端的算法其实还是比较容易实现的。

(入门篇)

 

简介

树形DP,字面意思,在树结构上的DP,通常根据比较子节点的最优得到父节点的状态根据父节点预处理后再遍历得到子节点的解
由于是入门篇,我们暂且先讨论前者。

原理

树一大特点就具有子结构,而DP也是要求最优子结构,并且两者都有相同的基本操作—“递归”,那么可见这两者就可以非常和谐的结合在一起了。

操作

1. 建树、预处理

由于只需要从上向下递归更新子树的父结点,所以并不需要双向建边。

2. 带转移方程树上递归

可以用 dp[i][0] ,dp[i][1]... 表示编号为 i 的节点,状态为 0,1... (此状态根据题意有不同意义)时的最优解。

设 f(x,y) 为判断 x,y 中最优解的条件

eg. dp[i][1] += dp[j][0] ;

      dp[i][0] += f ( dp[j][1] , dp[j][0] ) ;
 
入门例题
HDU 1520
bzoj 1864  题解
Vijos 1144

 (未完待续)

posted @ 2018-08-17 09:42  ViaCol  阅读(627)  评论(0编辑  收藏  举报
这句一言出处是 『《clannad》』
这句一言出处是 『《clannad》』