每个节点是个房间,数值代表钱。小偷偷里面的钱,不能偷连续的房间,至少要隔一个。问最多能偷多少钱

TreeNode* cur

mp[{cur, true}]表示以cur为根的树,最多能偷的钱

mp[{cur, false}]表示以cur为根的树,不偷cur节点的钱,最多能偷的钱

可以看出有下面的关系

mp[{node, false}] = mp[{node->left,true}] + mp[{node->right,true}]
mp[{node, true}] = max(node->val + mp[{node->left,false}] + mp[{node->right,false}], mp[{node, false}])

class Solution {
public:
void helper(TreeNode* node, map<pair<TreeNode*, bool>,int>& mp){
if(!node){
return;
}
//a(node)
//lk("root",node) helper(node->left, mp);
helper(node->right, mp);
mp[{node, false}] = mp[{node->left,true}] + mp[{node->right,true}];
mp[{node, true}] = max(node->val + mp[{node->left,false}] + mp[{node->right,false}],
mp[{node, false}]);
//dsp } int rob(TreeNode* root) {
map<pair<TreeNode*, bool>,int> mp;
//amap(mp, pair<TreeNode*, bool>,int)
//ahd(root)
mp[{NULL, true}]=;
mp[{NULL, false}]=;
helper(root, mp);
return max(mp[{root, false}], mp[{root, true}]);
}
};

动态演示 http://simpledsp.com/FS/Html/lc337.html

LeetCode 337. House Robber III 动态演示的更多相关文章

  1. Leetcode 337. House Robber III

    337. House Robber III Total Accepted: 18475 Total Submissions: 47725 Difficulty: Medium The thief ha ...

  2. [LeetCode] 337. House Robber III 打家劫舍 III

    The thief has found himself a new place for his thievery again. There is only one entrance to this a ...

  3. [LeetCode] 337. House Robber III 打家劫舍之三

    The thief has found himself a new place for his thievery again. There is only one entrance to this a ...

  4. Java [Leetcode 337]House Robber III

    题目描述: The thief has found himself a new place for his thievery again. There is only one entrance to ...

  5. leetcode 198. House Robber 、 213. House Robber II 、337. House Robber III 、256. Paint House(lintcode 515) 、265. Paint House II(lintcode 516) 、276. Paint Fence(lintcode 514)

    House Robber:不能相邻,求能获得的最大值 House Robber II:不能相邻且第一个和最后一个不能同时取,求能获得的最大值 House Robber III:二叉树下的不能相邻,求能 ...

  6. 337. House Robber III(包含I和II)

    198. House Robber You are a professional robber planning to rob houses along a street. Each house ha ...

  7. LeetCode 113. Path Sum II 动态演示

    给第一个目标值,返回一棵树从根到叶子所有和等于目标值的路径. 经典的深度优先算法 /** * Definition for a binary tree node. * struct TreeNode ...

  8. &lt;LeetCode OJ&gt; 337. House Robber III

    Total Accepted: 1341 Total Submissions: 3744 Difficulty: Medium The thief has found himself a new pl ...

  9. 【LeetCode】337. House Robber III 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

随机推荐

  1. 如何在nuxt中添加proxyTable代理

    背景 在本地开发vue项目的时候,当你习惯了proxyTable解决本地跨域的问题,切换到nuxt的时候,你会发现,添加了proxyTable设置并没有什么作用,那是因为你是用的vue脚手架生成的vu ...

  2. 什么是http协议??

    一.http协议的定义: http(Hypertext transfer protocol)超文本传输协议,通过浏览器和服务器进行数据交互,进行超文本(文本.图片.视频等)传输的规定.也就是说,htt ...

  3. hdu6351 Beautiful Now (全排列+循环节)

    题目传送门 题意: 给你n和k,你每次能交换n的两个位,问最多k次后的最小和最大值 思路: 考虑到n到1e9,所以可以用全排列来暴力,但是我们不能全排列之前的数位, 因为n中的位数可能相等,那样很难计 ...

  4. MFC框架各部分指针获取方式

    MFC框架各部分指针获取方式 前人在CSDN总结的,曾经帮助过我,整理总结一下,希望也能帮助一下别人. 获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument ...

  5. A dreamstart的催促 (快速幂) B TRDD got lost again

    A   dreamstart的催促 链接:https://ac.nowcoder.com/acm/contest/322/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...

  6. 详聊js中的原型/原型链

    先以一段简单的代码为例: function Dog(params){     this.name = param.name;     this.age = param.age;     this.ba ...

  7. C++ CMake 入门实战[转载]

    C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...

  8. SPOJ - DQUERY (主席树求区间不同数的个数)

    题目链接:https://vjudge.net/problem/SPOJ-DQUERY 题目大意:给定一个含有n个数的序列,有q个询问,每次询问区间[l,r]中不同数的个数. 解题思路:从左向右一个一 ...

  9. Python随笔——Map之键对应多值的处理

    在使用 Python 处理时,因为某些原因,可能遇到 Map 的键对应多个值的处理. 很常见的比如:查询某表的结果,对应了多条记录. 此时使用Python进行算法处理时,其中一种方式如下: 定义一个 ...

  10. 【leetcode】1053. Previous Permutation With One Swap

    题目如下: Given an array A of positive integers (not necessarily distinct), return the lexicographically ...