代码随想录day44算法随想录|动态规划07

打家劫舍一

挺简单的,但为什么这道题不能把奇偶位的都提出来加一遍,直接max比较呢?

打家劫舍二

成环了,即首尾元素不能同时选1.在考虑首元素,不考虑尾元素的方式下算最大值;2.不考虑尾元素

最后两种情况中取一个值最大的

打家劫舍三

二叉树的交叉选取

如果直接回溯递归,一直实时计算,就容易超时,所以可以采用树形dp

cpp 复制代码
class Solution {
public:
    int rob(TreeNode* root) {
        vector<int> result = robTree(root);
        return max(result[0], result[1]);
    }
    // 长度为2的数组,0:不偷,1:偷
    vector<int> robTree(TreeNode* cur) {
        if (cur == NULL) return vector<int>{0, 0};
        vector<int> left = robTree(cur->left);
        vector<int> right = robTree(cur->right);
        // 偷cur,那么就不能偷左右节点。
        int val1 = cur->val + left[0] + right[0];
        // 不偷cur,那么可以偷也可以不偷左右节点,则取较大的情况
        int val2 = max(left[0], left[1]) + max(right[0], right[1]);
        return {val2, val1};
    }
};
相关推荐
yi.Ist1 小时前
2025CCPC郑州邀请赛
c++·学习·算法·acm
少许极端1 小时前
算法奇妙屋(四十八)-单调栈
java·算法·单调栈
水木流年追梦1 小时前
CodeTop Top 300 热门题目2-最长回文子串
开发语言·人工智能·python·算法·leetcode
图码1 小时前
递归入门:从n到1的优雅打印之旅
数据结构·c++·算法·青少年编程·java-ee·逻辑回归·python3.11
大肥羊学校懒羊羊1 小时前
题解:计算约数个数
数据结构·c++·算法
生信之灵1 小时前
拓扑与曲率双剑合璧:scGeom如何从单细胞数据中“看见”细胞命运
人工智能·深度学习·算法·单细胞·多组学
良木生香1 小时前
【C++初阶】:STL——String从入门到应用完全指南(3)
c语言·开发语言·数据结构·c++·算法
_深海凉_1 小时前
LeetCode热题100-在排序数组中查找元素的第一个和最后一个位置
算法·leetcode·职场和发展
qyzm2 小时前
Educational Codeforces Round 189 (Rated for Div. 2)
数据结构·python·算法
fox_lht2 小时前
8.3.使用if let和let else实现简明的程序流控制
开发语言·后端·算法·rust