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

12 动态规划

状态定义?状态转移方程?

1. 打家劫舍

image

1.1 解题思路

理解题目:我需要选择一些数,使它们的和最大,并且选择的数字不能是相邻的。

我们先将这道题看成回溯。
考虑最后一个房子选或不选。
如果不选,问题就变成 \(n-1\) 个房子的问题。
如果选,问题就变成 \(n-2\) 个房子的问题。

回溯三问:
当前操作?枚举第 \(i\) 个房子选/不选
子问题? 从前 \(i\) 个房子中得到的最大金额和
下一个子问题? 分类讨论:
不选:从前 \(i-1\) 个房子中得到的最大金额和
选:从前 \(i-2\) 个房子中得到的金额和

\[dfs(i)=max(dfs(i-1), dfs(i-2)+nums[i]) \]

1.2 代码实现

1.2.1 回溯

点击查看代码
class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();auto dfs = [&](this auto&& dfs, int i) -> int {if (i < 0) {return 0;}return max(dfs(i - 1), dfs(i - 2) + nums[i]);};return dfs(n - 1);}
};
  • 时间复杂度:\(O(2^n)\)
  • 空间复杂度:\(O(n)\)

1.2.2 自顶向下:记忆化搜索

点击查看代码
class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();vector<int> dp(n, -1);// dp[i]表示偷盗第 $i$ 家所能获得的最大金额。auto dfs = [&](this auto&& dfs, int i) -> int {if (i < 0) {return 0;}int& ans = dp[i];if (ans != -1) {return ans;}ans = max(dfs(i - 1), dfs(i - 2) + nums[i]);return ans;};return dfs(n - 1);}
};
  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(n)\)

1.2.3 自底向上:递推

如何把记忆化搜索改成递推呢?
\(dfs\rightarrow\) \(f\) 数组
\(递归\rightarrow\) 循环
\(递归边界\rightarrow\) 数组初始值
已知:\(dfs(i)=max(dfs(i-1), dfs(i-2)+nums[i])\)
可以得到:
\(f(i)=max(f(i-1),f(i-2)+nums[i])\)

点击查看代码
class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();// 相当于在数组最前面插入-1,-2两个状态vector<int> f(n + 2, 0);for (int i = 0; i < n; ++i) {f[i + 2] = max(f[i + 1], f[i] + nums[i]);}return f[n + 1];}
};
  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(n)\)
    1.2.4 优化空间复杂度

\(f(i)\) 依赖于 上一个状态 \(f(i-1)\) 和 上上一个状态 \(f(i-2)\)
于是我们可以用 \(f0\) 表示上上一个,\(f1\)表示上一个。

点击查看代码
class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();int f0 = 0, f1 = 0;for (int i = 0; i < n; ++i) {int new_state = max(f1, f0 + nums[i]);f0 = f1;f1 = new_state;}return f1;}
};
  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(1)\)
http://www.jsqmd.com/news/316370/

相关文章:

  • 国内AI开发者,如何继续使用Claude?一文说清3种主流方案
  • 计算机毕业设计hadoop+spark+hive地震预测系统 地震数据可视化分析 大数据毕业设计(源码+LW文档+PPT+讲解)
  • 百考通AI数据分析报告服务:一键生成深度洞察,让数据为您清晰代言
  • 深度测评10个AI论文软件,本科生轻松搞定毕业论文!
  • 把Moltbot(Clawdbot)部署到阿里云服务器上,让这个AI员工24小时替你打工
  • 永生代码测试:数字永生系统的崩溃应急预案
  • 【ACM出版 | EI检索】2026 年大数据与智能制造国际学术会议(BDIM 2026)
  • 2026最新华为GT6二手智能手表回收价格,支持全国上门回收
  • 技术日报|智能体框架pi-mono登顶日增467星,PS2静态重编译器与HashiCorp Vault霸榜前三
  • 发道养发加盟培训内容
  • Vue 3 中 Watch 与 WatchEffect 的差异与使用场景
  • 评测推荐硒片什么牌子效果好?2026六款高品质硒片推荐,第一款全家适配
  • 2026年中国网站搭建公司哪家强?TOP10实力派官网设计制作服务商深度洞察推荐
  • 锌硒片能提高男人功能吗?十大锌硒片多维度评测!第一名计善堂天然酵母硒+柠檬酸锌高效安全可靠
  • ssd上的pg都在ssd上,hdd上的pg都在hdd上。从规则上来看,数据在hdd和ssd上是隔离的,那数据是如何实现迁移的
  • 补锌硒对备孕有帮助吗?锌硒片哪个牌子值得推荐?最新锌硒片十大品牌选购指南权威报告
  • 聊聊龙骨机设备供应商,南昌、济南性价比高的厂家有哪些
  • 分期乐购物额度“套现”陷阱大揭秘:我的血泪教训与合规变现之道
  • 2026电动工具品牌推荐:SATA世达“ChiE挈”智能锂电平台助力工业级高效作业
  • 2026最新国内电子签名排行:国内电子签名软件哪家强?
  • 深入探讨佰诚公考,课程体系完善吗 附哈尔滨培训公司排名
  • 算法与数据结构,到底是怎么节省时间和空间的
  • 软件是如何驱动硬件的
  • 2026年法律AI老牌软件性价比分析,北京公司哪家更靠谱
  • 医院设计施工改造定制服务怎么选 技良行在多地表现靠谱吗
  • 2026年江浙沪皖鲁口碑好的国际学校推荐,上海京岛义塾学校教学质量深度剖析
  • 探讨极限运动工程优质企业,大丰友邦极限运动场地建设排名怎样?
  • 中小企业福音!2026年五大高性价比电子签名软件推荐
  • 2026CRM系统选型全指南:10款主流产品深度对比+避坑手册
  • 探寻2026年DO溶氧仪供应商排名,找到心仪之选