代码随想录训练营第39天|树形dp

198. 打家劫舍

class Solution {
public:int rob(vector<int>& nums) {nums.insert(nums.begin(),0);int n=nums.size();vector<int> dp(n,INT_MIN);dp[0]=0;dp[1]=nums[1];for(int i=2; i<n; i++){dp[i]=max(dp[i-1],dp[i-2]+nums[i]);}return dp[n-1];}
};

dp[i]:截止下标i(包含i)的房子,所能打劫的最大金额

转移方程:考虑nums[i]是否被打劫,只有两种可能:

  • 抢,那么为了不触发警报,nums[i-1]一定不能被打劫,只能从i-2转移而来
  • 不抢,则nums[i-1]可以被抢,最大金额就等于dp[i-1]

引入空房间作为虚拟头,初始化更简单,且不影响最终结果。

213. 打家劫舍 II

class Solution {
public:int rob_range(vector<int>& nums, int left, int right) {if(left==right)return nums[left];int n=nums.size();vector<int> dp(nums.size(),INT_MIN);dp[left]=nums[left];dp[left+1]=max(nums[left+1],nums[left]);for(int i=left+2; i<=right; i++){dp[i]=max(dp[i-1],dp[i-2]+nums[i]);}return dp[right];}int rob(vector<int>& nums) {if(nums.size()==1)return nums[0];int amount1=rob_range(nums,0,nums.size()-2);int amount2=rob_range(nums,1,nums.size()-1);return max(amount1,amount2);}
};

上题的变种,题目可以拆分为两种情况:抢第一间或不抢第一间。分别处理取最大即可

337. 打家劫舍 III

class Solution {
public:pair<int,int> rob_tree(TreeNode* root){if(root==nullptr)return {0,0};auto [left_0, left_1]=rob_tree(root->left);auto [right_0, right_1]=rob_tree(root->right);int root_1=root->val+left_0+right_0;int root_0=max(left_0,left_1)+max(right_0,right_1);return {root_0,root_1};}int rob(TreeNode* root) {auto [root_0, root_1]=rob_tree(root);return max(root_0,root_1);}
};

状态转移:定义rob_tree返回的是pair:{不抢根的最大值,抢根的最大值}

采用后续遍历,利用子树的结果构建当前结果,也是分治的思想,即把当前问题拆解为规模更小的子问题,直到空树,一定为{0,0}。

对于当前层的计算逻辑,分两种情况:

  • 抢根,这时子树的根一定不能抢,否则触发报警,所以此时金额为root->val+left_0+right_0
  • 不抢根,这时子树的选择就随意了,不论子树抢或者不抢,均不会触发警报,所以分别取最大值即可:max(left_0,left_1)+max(right_0,right_1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146589.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

巴蒂克图案识别系统源码分享

巴蒂克图案识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

一文掌握 Prompt:万能框架+优化技巧+常用指标

Prompt 万能框架 在编写 Prompt 时&#xff0c;从0到1的编写出第一版 Prompt 往往是最难的&#xff0c;而基于已有 Prompt 利用各种技巧进行优化则相对简单。善于解决 “数理问题” 的我们在面对这样一个偏 “文理问题” 的任务时&#xff0c;就像小时候写作文一样难以提笔。如…

Java程序员在编写代码时,通常会使用哪些工具和框架?

Java程序员在日常编码工作中&#xff0c;通常会使用一系列工具和框架来提高开发效率、保证代码质量以及实现快速迭代。以下是一些常用的工具和框架&#xff1a; 开发环境和IDE IntelliJ IDEA&#xff1a;一个强大的Java集成开发环境&#xff0c;提供了智能代码补全、代码分析…

攻防世界Web新手练习区题目(view_source到simple_php)WP

目录 view_source​ robots​ Training-WWW-Robots PHP2​ get_post​ backup​ cookie​ disabled_button​ simple_js​ xff_referer​ weak_auth​ command_execution​ simple_php​ view_source 获取在线场景后访问题目场景 在右键不管用的情况下&#xff0…

一招教你挑代理IP的秘诀

逛乎&#xff0c;一直刷到这类问题&#xff1a; 本质上&#xff0c;都是在面对市面上那么多代理IP服务提供商&#xff0c;挑得眼花缭乱了&#xff0c;而代理IP直接影响到我们数据采集任务的效率、安全性和成功率&#xff0c;所以我们在挑选服务提供商的时候都会谨慎一些。索性我…

华为OD机试 - 水仙花数Ⅱ - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

JavaWeb--纯小白笔记03:servlet入门---动态网页的创建

笔记&#xff1a;index.html在tomcat中为默认的名字&#xff0c;html里面的语法不严谨。改配置文件要小心&#xff0c;不然容易删掉其他 Servlet&#xff1a;服务器端小程序&#xff0c;写动态网页需要用Servlet&#xff0c;普通的java类通过继承HttpServlet&#xff0c;可以响…

抖音如何改ip地址到另外城市

在数字化时代&#xff0c;抖音作为广受欢迎的社交媒体平台&#xff0c;不仅连接了亿万用户&#xff0c;也成为了展示个人生活、分享创意内容的重要舞台。然而&#xff0c;有时候出于隐私保护等需求&#xff0c;用户可能希望更改抖音账号显示的IP地址&#xff0c;使其看起来像是…

超过1000篇文献?Mem)oRAG,下一代 RAG 技术,轻松让AI记住这些海量信息?

想象一下,你每天要阅读几十篇文献,整理上千页的笔记,再将这些信息整合到自己的研究中,是不是有点头大?不光是你,很多人都有这样的困扰,尤其是在处理大量信息时。我们总是渴望一种更智能的方式,能帮我们高效地找到、理解并且运用这些知识。而这正是 MemoRAG 的用武之地。…

会声会影2025视频剪辑教学

会声会影2025是一款超级受欢迎的视频播放软件&#xff0c;用于剪辑和编辑各种类型的视频素材。软件具有直观的用户界面&#xff0c;使得即使对于初学者来说也能轻松上手。该软件提供了各种创意工具&#xff0c;可以帮助用户实现他们的创意想法。用户可以裁剪、合并和重新排列视…

基于误差状态的卡尔曼滤波

基于误差状态的卡尔曼滤波ESKF 注意这里的观测方程&#xff0c;是IMU的误差状态和激光定位的差值得到的。

已解决sublime text 3 注册激活

问题&#xff1a;未激活 解决方法&#xff1a; 安装sublime3后&#xff0c;将Patch.exe文件放入sublime 安装文件下 运行Patch.exe&#xff0c;复制粘贴注册码到 preference->enter license&#xff1b;操作如下 点击“Use license”,提示如下图表示激活成功&#xff1a; 重…

学习笔记——EfficientNet

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks EfficientNet&#xff1a;重新思考卷积神经网络的模型扩展 论文下载地址&#xff1a; https://arxiv.org/abs/1905.11946 学习笔记参考了这位大佬&#xff1a;https://blog.csdn.net/qq_37541097/ar…

【吊打面试官系列-MySQL面试题】列对比运算符是什么?

大家好&#xff0c;我是锋哥。今天分享关于【列对比运算符是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 列对比运算符是什么&#xff1f; 在 SELECT 语句的列比较中使用&#xff0c;<>&#xff0c;<&#xff0c;<&#xff0c;> &#x…

高校心理辅导:Spring Boot技术实现

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…

Spring Boot赋能高校心理健康教育

1绪 论 1.1研究背景 随着计算机和网络技术的不断发展&#xff0c;计算机网络已经逐渐深入人们的生活&#xff0c;网络已经能够覆盖我们生活的每一个角落&#xff0c;给用户的网上交流和学习提供了巨大的方便。 当今社会处在一个高速发展的信息时代&#xff0c;计算机网络的发展…

做短剧申请微信小程序备案整体的操作流程!

做国内短剧对接微信小程序&#xff0c;小程序备案是必不可少的&#xff0c;需要准备哪些资料&#xff0c;以及需要注意的事项&#xff0c;所需材料全部整理出来了&#xff0c;小程序从注册到类目和备案分为五个步骤来讲解&#xff0c;下面就由我来向大家介绍所有的操作流程。 …

【Linux】解锁系统编程奥秘,高效文件IO的实战技巧

文件 1. 知识铺垫2. C文件I/O2.1. C文件接口2.2 fopen()与重定向2.3. 当前路径2.4. stdin、stdout、stderr 3. 系统文件I/O3.1. 前言3.2. open3.2.1. flags</h3>3.2.2. mode</h3>3.2.3. 返回值fd 3.3. write</h2>3.4. read3.5. close</h2>3.6. lseek&l…

牛啊,GitHub 代理加速图文教程

大家好&#xff0c;众所周知&#xff0c;GitHub 在国内访问速度堪忧&#xff0c;经常出现访问不了的情况&#xff0c;如果我们去 clone 代码&#xff0c;网速非常差。今天教大家如何给 GitHub 进行加速。 要用到我开发的开源项目 Cloudflare Workers Proxy&#xff0c;它是一个…

腾讯大模型算法实习生面试题,大家秋招上岸

本人情况 关于博主: 博主是过年某985研二&#xff0c;过完年打算找大厂实习offer&#xff0c;本次主要记录了本小菜研找实习的坎坷历程&#xff0c; 欢迎大佬们给建议!!! 应聘岗位: 腾讯大模型算法实习生 面试轮数: 第一轮 整体面试感觉:偏难 技术问题 分布式训练框架都了解…