树上dp
题意:
二叉树,树上每个结点有权值,求出一条路径使得路径经过结点的权值之和最大.
思路:
每个结点作为子树的根,记录子树的两个信息,最大权值路径dp1,该结点为路径其中一端点的最大权值路径dp2,则:
dp1[father]=max(dp1[lson],dp1[rson],dp2[lson]+val+dp2[rson],dp2[father])
dp2[father]=val+max(0,dp2[lson],dp2[rson])
则答案为dp1[root]
每个结点只访问一次,复杂度O(n).
需要注意一下,结点权值可以为负数,还有就是左右子树为空要特殊处理一下.
总结:
树上dp