问题:给出一个树,只能隔一层取值,求最大值。
思路:方法一用dp(node)从当前结点开始可以取的最大值。当取node的值时,dp(node)=node.val + dp(node.left.left)+dp(node.left.right)+dp(node.right.left)+dp(node.right.right)。当不取noder 值时,dp(node)=dp(node.left)+dp(node.right),两者取最大值。
方法二使用dp(node,0)表示不取node时的最大值,dp(node,1)表示取node时的最大值。
则有dp(node,0)=max(dp(node.left,0), dp(node.left,1)) + max(dp(node.right,0), dp(node.right,1))
dp(node,1)=node.val+ dp(node.left,0) + dp(node.right,0)
具体代码参考:
https://github.com/wuli2496/OJ/tree/master/LeetCode/House%20Robber%20III

本文探讨了在树结构中,采用动态规划策略解决隔层取值以求最大值的问题。提供了两种方法,一种是直接使用dp(node)表示从当前节点开始能取得的最大值,另一种是通过dp(node,0)和dp(node,1)分别表示不取和取当前节点时的最大值。详细解析了每种方法的递归公式,并提供了代码实现的参考链接。

被折叠的 条评论
为什么被折叠?



