4. 树形DP

Posted wsw-seu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4. 树形DP相关的知识,希望对你有一定的参考价值。

337. 打家劫舍 III

https://leetcode-cn.com/problems/house-robber-iii/

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func rob(root *TreeNode) int {
	return Help(root)
}
//缓存很重要,可以存很多子问题的值
var m = map[*TreeNode]int{}
func Help(root *TreeNode) int{
	if root == nil{
		return 0
	}
	if v,ok := m[root];ok{
		return v
	}
	res,do,not_do := 0,root.Val,0
	//do / not_do
	if root.Right != nil{
		do +=  Help(root.Right.Right) + Help(root.Right.Left)
	}
	if root.Left != nil{
		do += Help(root.Left.Left) + Help(root.Left.Right)
	}
	not_do += Help(root.Left)+Help(root.Right)
	res = MAX(do,not_do)
	m[root] = res
	return res
}

func MAX(i,j int) int{
	if i<j{
		return j
	}else{
		return i
	}
}

  

以上是关于4. 树形DP的主要内容,如果未能解决你的问题,请参考以下文章

树形DP小结

树的直径,树形DP,DFS——POJ1958

树形dp总结

4.9 省选模拟赛 圆圈游戏 树形dp set优化建图

树形DP入门

动态规划_计数类dp_数位统计dp_状态压缩dp_树形dp_记忆化搜索