您的位置:首页 > 其它

leetcode_House Robber III

2016-05-25 14:18 253 查看
今天本宝宝终于体验了一次什么叫记忆化搜素

题意:一个房子,里面的房间构成二叉树,并且每个房间都有一定数目的宝藏,要求在不偷相邻房间的宝藏的情况下,获得最大收益

class Solution {
public:
map<TreeNode *,int> zero;
map<TreeNode *,int> one;
int add(TreeNode * root ,int index)
{
if(root==NULL) return 0;
int value;
if(index==0)
{
if(zero[root]!=0) return zero[root];
else
{
value=max(add(root->left,0)+add(root->right,1),add(root->left,0)+add(root->right,0));
value=max(value,add(root->left,1)+add(root->right,1));
value=max(value,add(root->left,1)+add(root->right,0));
zero[root]=value;
return value;
}
}
else if(index==1)
{
if(one[root]!=0) return one[root];
else
{
value=add(root->left,0)+add(root->right,0)+root->val;
one[root]=value;
return value;
}
}
return 0;
}
int rob(TreeNode* root) {
return max(add(root,0),add(root,1));
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: