当前位置: 首页 > ops >正文

力扣HOT100之动态规划:198. 打家劫舍


这道题之前刷代码随想录的时候做过,这一次直接一遍过了,还是按照动规五部曲:
1.确定dp[i]的含义:将下标为0 ~ i的房子纳入考虑范围时所能取到的最大收益
2.确定递推公式:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
3.dp数组初始化:dp[0] = nums[0], dp[1] = max(nums[0], nums[1]);
4.确定遍历顺序:从左往右遍历
5.打印数组(省略)
这道题的限制是相邻的两个房子不能同时偷,我们在将第0 ~ i间房子纳入考虑范围时,第i间房子只有两种状态:偷或者不偷,如果偷,那么第i - 1间房子就不能偷了,这种情况下的最大收益为dp[i - 2] + nums[i],如果不偷,那么这种情况下的最大收益为dp[i - 1],所以我们要取其中的最大值作为dp[i]的值。经过一系列迭代递推,最终的dp[nums.size() - 1]就是我们返回的最终结果。

class Solution {
public:int rob(vector<int>& nums) {//动规五部曲//1.确定dp[i]的含义:将下标为0 ~ i的房子纳入考虑范围时所能取到的最大收益//2.确定递推公式:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);//3.dp数组初始化:dp[0] = nums[0], dp[1] = max(nums[0], nums[1]);//4.确定遍历顺序:从左往右遍历//5.打印数组(省略)int n = nums.size();vector<int> dp(n);dp[0] = nums[0];if(n > 1)dp[1] = max(nums[0], nums[1]);for(int i = 2; i < n; i++)dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);return dp[n - 1];}
};
http://www.xdnf.cn/news/9985.html

相关文章:

  • 循环神经网络(RNN):为什么它能处理时序数据?它真的能减轻过拟合吗?
  • Go语言defer关键字:延迟执行的精妙设计
  • 通用的防御框架,用于抵御(多模态)大型语言模型的越狱攻击
  • MQTT协议,EMQX部署,MQTTX安装学习
  • golang连接sm3认证加密(app)
  • BioID技术在宿主-病原体相互作用领域的应用
  • 《操作系统真相还原》——大战MBR
  • 数据结构——图
  • 大语言模型 24 - MCP 自动操作 提高模型上下文能力 Cursor + Sequential Thinking Server Memory
  • 云游戏混合架构
  • 【机械视觉】Halcon—【六、交集并集差集和仿射变换】
  • AI Agent开发入门笔记(1)
  • C++ 实现 std::move_only_function
  • DeepSeek R1 模型小版本升级,DeepSeek-R1-0528都更新了哪些新特性?
  • UniDream AI绘画——让想象力,无界绽放
  • 可定制化货代管理系统,适应不同业务模式需求!
  • 智能改变一切:当技术革命遇见人类文明
  • OpenCV---pointPolygonTest
  • 【实例】事业单位学习平台自动化操作
  • 【Web应用】若依框架:基础篇12 项目结构
  • DeepSeek 赋能文化遗产数字化修复:AI 重构千年文明密码
  • 如何从ISO镜像直接制作Docker容器基础镜像
  • 明场检测与暗场检测的原理
  • Excel 中的SUMIFS用法(基础版),重复项求和
  • 基于SpringBoot的商家销售管理网站的设计与实现
  • 第二章 2.1 数据存储安全风险之数据存储风险点
  • Java类和对象详解
  • RS232转Profinet网关在检漏仪与西门子PLC里的应用
  • 前端流式接收数据讲解
  • 万兴PDF手机版