打家劫舍问题汇总

这篇博客汇总了打家劫舍问题的四种情况,包括leetcode的198和213题,以及树形DP的应用。问题1和2涉及到一维数组,不允许相邻元素同时被选取,问题3将问题扩展到树形结构,问题4则进一步应用到图的DP解法。
摘要由CSDN通过智能技术生成

打家劫舍问题总的来说就是相邻的数不能同时取

问题1

leetcode198

这个问题就是从头到尾遍历一个数组,数组相邻的数不能同时取,求最后的最大值

dp[i][0] = max(dp[i-1][0], dp[i-1][1])
dp[i][1] = dp[i-1][0] + prices[i]

问题2

leetcode213

这个问题描述的是数组的头尾也算是相邻,因此只要我们不同时取头尾就好,按照问题1的思路找prices(0, size()-1),和prices(1, size())的最大值,两者取最大即为最后的最大值

问题3

leetcode337

这个问题也是相邻不能取的问题,但这时候已经不是一维数组了,而是一颗树,因此是树形的dp

遍历函数每次返回一个数组记为p,p[0]代表不取当前节点子节点的最大值,p[1]代表取当前节点子节点的最大值

int *lastOrder(TreeNode *root) {
        if(!root)return nullptr;
        int *left = lastOrder(root -> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值