树形DP:打家劫舍3
问题:
思路:
每个节点有选和不选两种状态,若选,则其孩子节点不可选,若该节点不选,则孩子节点可选也可不选
设DP[u][0]表示不选当前结点u的情况下以u为根的子树所能得到得最大价值
DP[u][1]表示选当前结点u的情况下以u为根的子树所能得到得最大价值
设v为其孩子节点
使用pair保存选或不选两种情况的值,通过DFS求解
代码:
class Solution {
public:
pair<int, int> dfs(TreeNode *root) {
if (root == nullptr) {
return { 0, 0 };
}
auto left_pair = dfs(root->left);
auto right_pair = dfs(root->right);
return { root->val + left_pair.second + right_pair.second,
max(left_pair.first, left_pair.second) + max(right_pair.first, right_pair.second) };
}
int rob(TreeNode* root) {
auto p = dfs(root);
return max(p.first, p.second);
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153825.html