LeetCode337打家劫社Ⅲ(树形动态规划)
题目链接: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打家劫社Ⅲ(树形动态规划)相关推荐
- LeetCode231打家劫社Ⅱ(动态规划)
题目链接:leetcode213 思路:在之前的基础上加上环的约束,可以特判第一个选与不选,最后把两个方向的最终状态取个最大返回. class Solution {public:int rob(vec ...
- LeetCode198打家劫社(线性动态规划)
题目链接:Leetcode198 Code: class Solution {public:int rob(vector<int>& nums) {//dp[i]表示偷盗到第i家获 ...
- leetcode打家劫社简单实现--python
给定一个数组代表每家的金钱: [1, 2, 0, 4, 6] 不可以抢劫相邻两家的金钱, 可以抢劫相隔的两家, 求最大值 1+0+6 = 7 2+4 = 6 max = 7 思路: 动态规划, 遍历数 ...
- HDU1520 Anniversary party 树形动态规划
HDU1520 Anniversary party 树形动态规划 Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory ...
- 蓝桥杯 算法训练(四)结点选择(树形动态规划)
结点选择(树形动态规划)C语言 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一 ...
- c++ 不撞南墙不回头——树形动态规划(树规)
不撞南墙不回头--树规总结 焦作一中信息学oy 之所以这样命名树规,是因为树规的这一特殊性:没有环,dfs是不会重复,而 ...
- 不撞南墙不回头——树形动态规划(树规)
不撞南墙不回头--树规总结 焦作一中信息学oy 之所以这样命名树规,是因为树规的这一特殊性:没有环,dfs是不会重复,而 ...
- Leetcode_6_Dynamic Programming_198,213打家劫室,打家劫室II
自己写滴~ 198.打家劫室 class Solution {public int rob(int[] nums) {if(nums.length==0) return 0; int[] dp=new ...
- Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树形动态规划)
原题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意: ...
最新文章
- 柯南变声器的算法实现原理
- Effective_STL 学习笔记(四十四) 尽量使用成员函数代替同名的算法
- 获取socket对应的接收缓冲区中的可读数据量
- springboot工程的热部署
- Xavier Initialization 的理解与推导(及实现)
- WEEX|简单界面的实现与页面跳转
- Windows下使用platform.pk8 和platform.x509.pem生成jks签名文件
- android数据库汉字,GitHub - JamesLiAndroid/chinese-xinhua: 中华新华字典数据库。包括歇后语,成语,词语,汉字。提供新华字典API。...
- linux 电源管理 power supply class
- Exception:No serializer found for class and no properties discovered to create BeanSerializer
- [产品设计]如何绘制业务流程图(下)
- 微博营销的价值与注意点
- Python练习_数据类型_day4
- android版本低无法安装微信,解决低版本安卓4.4.4无法安装微信的问题
- 傅里叶变换的相关公式
- 国外免费公共DNS解析服务器
- 软考系统分析师倒计时第5天
- 传统支付方式不能满足线下支付的需求
- 10【matplotlib常用统计图】02绘制条形图
- iOS 在线JSON转模型工具(Swift、Objective-C、Java)