题目链接:leetdcode337

思路:先序列化,再树形DP,上一个节点如果选取则下一层节点不会取,否则从下层选和不选选一个最大的传递上来。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:int rob(TreeNode* root) {if(!root) return 0;vector<vector<int> > G; G.clear();int n=0;dfs1(root, n, G);vector<vector<int> > dp(n+1, vector<int>(2, -1));return max(dfs2(0, 0, G, dp), dfs2(0, 1, G, dp));}//dfn序建表void dfs1(TreeNode* rt, int& sz, vector<vector<int> >& G) {G.push_back({rt->val});int cur = sz;if(rt->left) {G[cur].push_back(++sz);dfs1(rt->left, sz, G);}if(rt->right) {G[cur].push_back(++sz);dfs1(rt->right, sz, G);}}//树形DP rt结点选或不选int dfs2(int rt, int chio, vector<vector<int> >& G, vector<vector<int> >& dp) {if(dp[rt][chio] != -1) return dp[rt][chio];//当前节点选与不选if(chio) dp[rt][chio] = G[rt][0];else dp[rt][chio] = 0;for(int i=1; i<G[rt].size(); i++) {//处理分支中选与不选的最大值if(chio) dp[rt][chio] += dfs2(G[rt][i], 0, G, dp);else dp[rt][chio] += max(dfs2(G[rt][i], 0, G, dp), dfs2(G[rt][i], 1, G, dp)); //当当前节点不选则可以考虑对分支选和不选中取一个最大}return dp[rt][chio];}
};

LeetCode337打家劫社Ⅲ(树形动态规划)相关推荐

  1. LeetCode231打家劫社Ⅱ(动态规划)

    题目链接:leetcode213 思路:在之前的基础上加上环的约束,可以特判第一个选与不选,最后把两个方向的最终状态取个最大返回. class Solution {public:int rob(vec ...

  2. LeetCode198打家劫社(线性动态规划)

    题目链接:Leetcode198 Code: class Solution {public:int rob(vector<int>& nums) {//dp[i]表示偷盗到第i家获 ...

  3. leetcode打家劫社简单实现--python

    给定一个数组代表每家的金钱: [1, 2, 0, 4, 6] 不可以抢劫相邻两家的金钱, 可以抢劫相隔的两家, 求最大值 1+0+6 = 7 2+4 = 6 max = 7 思路: 动态规划, 遍历数 ...

  4. HDU1520 Anniversary party 树形动态规划

    HDU1520 Anniversary party 树形动态规划 Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  5. 蓝桥杯 算法训练(四)结点选择(树形动态规划)

    结点选择(树形动态规划)C语言 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一 ...

  6. c++ 不撞南墙不回头——树形动态规划(树规)

    不撞南墙不回头--树规总结                                         焦作一中信息学oy 之所以这样命名树规,是因为树规的这一特殊性:没有环,dfs是不会重复,而 ...

  7. 不撞南墙不回头——树形动态规划(树规)

    不撞南墙不回头--树规总结                                         焦作一中信息学oy 之所以这样命名树规,是因为树规的这一特殊性:没有环,dfs是不会重复,而 ...

  8. Leetcode_6_Dynamic Programming_198,213打家劫室,打家劫室II

    自己写滴~ 198.打家劫室 class Solution {public int rob(int[] nums) {if(nums.length==0) return 0; int[] dp=new ...

  9. Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树形动态规划)

    原题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意: ...

最新文章

  1. 柯南变声器的算法实现原理
  2. Effective_STL 学习笔记(四十四) 尽量使用成员函数代替同名的算法
  3. 获取socket对应的接收缓冲区中的可读数据量
  4. springboot工程的热部署
  5. Xavier Initialization 的理解与推导(及实现)
  6. WEEX|简单界面的实现与页面跳转
  7. Windows下使用platform.pk8 和platform.x509.pem生成jks签名文件
  8. android数据库汉字,GitHub - JamesLiAndroid/chinese-xinhua: 中华新华字典数据库。包括歇后语,成语,词语,汉字。提供新华字典API。...
  9. linux 电源管理 power supply class
  10. Exception:No serializer found for class and no properties discovered to create BeanSerializer
  11. [产品设计]如何绘制业务流程图(下)
  12. 微博营销的价值与注意点
  13. Python练习_数据类型_day4
  14. android版本低无法安装微信,解决低版本安卓4.4.4无法安装微信的问题
  15. 傅里叶变换的相关公式
  16. 国外免费公共DNS解析服务器
  17. 软考系统分析师倒计时第5天
  18. 传统支付方式不能满足线下支付的需求
  19. 10【matplotlib常用统计图】02绘制条形图
  20. iOS 在线JSON转模型工具(Swift、Objective-C、Java)

热门文章

  1. Linux里面 update 和 upgrade 的区别
  2. c语言输入一串字符统计各字母出现次数,统计输入字符各个字母出现频率的解题思路...
  3. 神经网络、目标检测学习
  4. 嵌入式操作系统风云录:历史演进与物联网未来第2章 Chapter2
  5. MySQL数据库监控与调优(2)
  6. 哪种投影仪好用?家用电视投影仪哪种好
  7. win10睡眠只是关掉显示器的问题
  8. 树模型之三种常见的决策树:CART,…
  9. Chrome——截图插件篇
  10. 树模型(1)-入门指南