标签:图片 png 最大 etc font 树形dp style nod ima
☆☆☆☆思路:树形DP问题。
class Solution { /** * 1.状态的定义:dp[node][j] 表示 node是否偷取所能获得的最大价值。 * j = 0, 表示node节点不偷 ; j = 1, 表示node结点偷取 * 2.状态转移方程: * 如果当前节点偷,那么左右子节点均不能偷。 * 如果当前节点不偷,那么左右子节点偷不偷都可,选最大值。 * * 遍历方式选择 <后序遍历> * 因为,子结点陆续汇报信息给父结点,一层一层向上汇报,最后在根结点汇总值。 */ public int rob(TreeNode root) { int[] res = dfs(root); return Math.max(res[0], res[1]); } private int[] dfs(TreeNode node) { if (node == null) { return new int[]{0,0}; } int[] left = dfs(node.left); int[] right = dfs(node.right); // dp[0]:以当前 node 为根结点的子树能够偷取的最大价值,规定 node 结点不偷 // dp[1]:以当前 node 为根结点的子树能够偷取的最大价值,规定 node 结点偷 int[] dp = new int[2]; dp[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]); // 当前节点不偷,下家可偷可不偷 dp[1] = node.val + left[0] + right[0]; // 当前节点偷,那么下家就不能偷了 return dp; } }
标签:图片 png 最大 etc font 树形dp style nod ima
原文地址:https://www.cnblogs.com/HuangYJ/p/14217113.html