这个周,周末没有比赛,这几天也都在做树形dp了 现在为止做了12个题了,,遇到很多题意一样的题,
都运用了dfs和背包,dfs是深搜的一条枝到叶子,背包是对于当前节点,对他的直系子节点进行01背包(选或者不选)
感觉现在就两种模板
一种是不定根节点
找子节点,根据父子代的关系推出状态转移方程就行
难点是推状态转移方程
双向的定一个look【】,记录是否便历过,存struct时,存双向的
dfs 的for循环的是兄弟节点,以当前点为根节点,带状态转移方程,回溯~
一般情况下dfs在方程的前面
特殊的有apple tree是三维的dp数组,因为存在返回节点的情况,第三维存的是是否返回位置,不返回时,包括(当前点不反回且子节点不返回)(当前点不返回,但子节点返回) 节点之间相互独立,可依次考虑
再一种就是每个点分别为根节点时的比较情况
在加上一次dfs循环,找当前结点与父节点之前的关系,例如B,E,要考虑每一个点为根节点的情况,只要再推一个状态转移方程即可,一般情况先,方程在dfs的前面
还看到一个题,是到从指定点开始,到指定点结束,寻找最值,这个题还没有做出来,觉得可能有点新意