动态规划:从记忆化搜索到递推 打家劫舍

news2024/9/23 9:27:56

目录

LeetCode198 打家劫舍

 1、递归搜索+保存计算结果=记忆化搜索

2、1:1翻译成递推

3、空间优化

LeetCode213 打家劫舍II

LeetCode198 打家劫舍

 1、递归搜索+保存计算结果=记忆化搜索

回溯三问:

(1)当前操作?枚举第i个房子选/不选

(2)子问题?从前i个房子中的得到的最大金额和

(2)下一个子问题? 分类讨论:

        不选:从前i-1个房子中得到的最大金额和

        选:从前i-2个房子中得到的最大金额和+nums[i]

记忆化搜索:把递归的计算结果保留下来,下次递归到同样的入参时,就直接返回先前保存的结果。

/*
 * @lc app=leetcode.cn id=198 lang=cpp
 *
 * [198] 打家劫舍
 */

// @lc code=start
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    int rob(vector<int>& nums) {
        int n=nums.size();
        vector<int> cache(n,-1);
        auto dfs=[&](auto&& dfs,int i)->int{
            if(i<0) return 0;
            if(cache[i]!=-1) return cache[i]; 
            return cache[i]=max(dfs(dfs,i-1),dfs(dfs,i-2)+nums[i]);
        };
        return dfs(dfs,n-1);
    }
};

时间复杂度:O(n)

空间复杂度:O(n)

2、1:1翻译成递推

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

时间复杂度:O(n) 

空间复杂度:O(n)

3、空间优化

class Solution {
public:
    int rob(vector<int>& nums) {
        int f0=0,f1=0;
        for(int x:nums){
            int new_f=max(f1,f0+x);
            f0=f1;
            f1=new_f;
        }
        return f1;
    }
};

时间复杂度:O(n) 

空间复杂度:O(1)

LeetCode213 打家劫舍II

分类讨论,考虑是否偷 nums[0]:

如果偷 nums[0],那么 nums[1] 和 nums[n−1] 不能偷,问题变成从 nums[2] 到 nums[n−2] 的非环形版本,调用 198 题的代码解决;
如果不偷 nums[0],那么问题变成从 nums[1] 到 nums[n−1] 的非环形版本,同样调用 198 题的代码解决。

/*
 * @lc app=leetcode.cn id=213 lang=cpp
 *
 * [213] 打家劫舍 II
 */

// @lc code=start
#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    int rob1(vector<int>& nums,int start,int end){
        int f0 = 0, f1 = 0;
        for (int i = start; i < end; i++) {
            int new_f = max(f1, f0 + nums[i]);
            f0 = f1;
            f1 = new_f;
        }
        return f1;
    } 
    int rob(vector<int>& nums) {
        int n=nums.size();
        return max(nums[0] + rob1(nums, 2, n - 1), rob1(nums, 1, n));
    }    
};

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

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

相关文章

计算机的错误计算(七十三)

摘要 计算机的错误计算&#xff08;七十二&#xff09;探讨了大数的余割函数的错误计算 。本节讨论另外一类数值&#xff1a; 附近数 的余割函数的计算精度问题。 例1. 已知 计算 csc(x) . 若在 Excel 中计算&#xff0c;则有 若用Java 编程实现 , 即有下列代码&#x…

认知杂谈26

今天分享 有人说的一段争议性的话 I I 上班的双刃剑&#xff1a;安稳与束缚的较量 上班这事儿啊&#xff0c;好多人都觉得那就是稳定的代表。每天按时去打卡&#xff0c;每个月都能稳稳地拿到工资&#xff0c;听起来好像挺美的&#xff0c;就跟理想生活似的。但咱要是仔细琢…

UE管理内容 —— FBX Asset Metadata Pipeline

随着实时3D制作大小和复杂程度的增加&#xff0c;以及构成现代制作流程的工具数量的不断增加&#xff0c;增加智能自动化来提高美术效率变得越发重要&#xff1b;这种智能自动化通常主要依靠元数据&#xff1a;有关资源的自定义数据&#xff0c;在项目中为资源赋予意义&#xf…

基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 空间覆盖度模型 基于GA的优化方法 5.完整程序 1.程序功能描述 基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真。分别对三维空间的节点覆盖率&#xff0c;节点覆盖使用数量进行…

为什么走线宽度不同会引起阻抗畸变

事先说明&#xff1a;内容不是原创&#xff0c;或者只是自己的技术总结。仅仅用于本人日常记录 1 参考博客 参考博客来源&#xff1a; 原博客 2 基本知识点 2.1 为什么阻抗突变会引起反射 信号沿传输线传播时&#xff0c;其路径上的每一步&#xff0c;都有相应的瞬时阻抗&…

项目需求 | vscode远程免密登录Linux服务器指南-含所需的命令和步骤

步骤1&#xff1a;安装Remote - SSH扩展 在VSCode中&#xff0c;打开扩展视图&#xff0c;搜索并安装Remote Development扩展包&#xff0c;它包含了Remote - SSH扩展。 步骤2&#xff1a;生成SSH密钥对 在本地计算机上打开终端或命令提示符&#xff0c;执行以下命令&#…

约瑟夫环问题【算法 06】

约瑟夫环问题 约瑟夫环&#xff08;Josephus Problem&#xff09;是一个经典的数学和计算问题&#xff0c;其核心是解决在一群人围成一圈&#xff0c;每隔一定人数就淘汰一个人&#xff0c;最后剩下的那个人的编号。 问题描述 假设有 ( n ) 个人围成一圈&#xff0c;从第一个…

负载调制平衡放大器LMBA理论分析与ADS理想架构仿真

负载调制平衡放大器LMBA理论分析与ADS理想架构仿真 负载调制平衡放大器Load Modulation Balanced PA&#xff0c;简称LMBA是2016年Cripps大佬分析实践的&#xff1a; An Efficient Broadband Reconfigurable Power Amplifier Using Active Load Modulation 本文ADS工程下载链…

回顾MVC

Tomcat是servlet的容器,想用HttpServlet需要导入tomcat jar包 下图是没用springmvc时的场景&#xff0c;首先在web.xml里面配置访问路径为/Hello然后 通过get请求去调用login方法最后重定向到index.jsp中 index.jsp里面的内容 重定向到index.jsp中 在控制台获取到username里面的…

考研数学|强化速成!1000/660/880题重点刷哪本?

马上9月了&#xff0c;还在纠结做什么题吗&#xff0c;1000/660/880&#xff0c;这几本习题册都不错。我的建议是选一本主力习题册660。其中1000和880题都可以作为主力习题册&#xff0c;而660题专门考察客观题&#xff0c;可以作为辅助习题册来做。该怎么选呢&#xff1f;如果…

pytorch深度学习基础 8(简单的神经网络替换线性模型)

接上一节的思路&#xff0c;这一节我们将使用神经网络来代替我们的之前的线性模型作为逼近函数。我们将保持其他的一切不变&#xff0c;只重新定义模型&#xff0c;小编这里构建的是最简单的神经网络&#xff0c;一个线性模块&#xff0c;一个激活函数&#xff0c;然后一个线性…

8月25日笔记

IOX的使用 iox是一款功能强大的端口转发&内网代理工具&#xff0c;该工具的功能类似于lcx和ew&#xff0c;但是iox的功能和性能都更加强大。 实际上&#xff0c;lcx和ew都是非常优秀的工具&#xff0c;但还是有地方可以提升的。在一开始使用这些工具的一段时间里&#xff…

8月26日星期一今日早报简报微语报早读

8月26日星期一&#xff0c;农历七月廿三&#xff0c;早报微语早读。 1、中国战队EDG获得2024无畏契约全球冠军赛总冠军&#xff1b; 2、亚洲首例猴痘Ib变异病例出现&#xff0c;可通过飞沫传播&#xff1b; 3、三文鱼刺身隔夜返包销售 胖东来&#xff1a;奖励投诉者10万&…

第15届蓝桥杯青少组Scratch初级组省赛真题试卷

第十五届蓝桥杯青少组省赛Scratch初级组真题试卷 题目总数&#xff1a;10 总分数&#xff1a;360 选择题 第 1 题 单选题 Scratch运行以下程序&#xff0c;角色会说( )? A.29 B.31 C.33 D.35 第 2 题 单选题 scratch运行下列哪个程序后&#xff0c;宇航…

windows安全软件之火绒杀毒的密码忘记后处理

一、问题描述 某次&#xff0c;想升级系统补丁&#xff0c;但多次尝试后都失败&#xff0c;排查杀毒软件影响过程中&#xff0c;发现火绒杀毒配置了密码保护&#xff0c;但因时间太久&#xff0c;密码已无从考证&#xff0c;那我们应该怎样处理这种情况呢&#xff1f; 二、处…

机器学习课程学习周报九

机器学习课程学习周报九 文章目录 机器学习课程学习周报九摘要Abstract一、机器学习部分1.1 Word Embedding1.1.1 词嵌入的基本概念1.1.2 word2vec连续词袋模型CBOW1.1.3 word2vec跳字模型Skip-gram 1.2 Transformer代码实践DatasetDataloaderModelLearning rate scheduleModel…

C++STL之list的使用详解

一、简介 1、底层&#xff1a;list为双向链表&#xff0c;即struct中包含一个数据和两个指针&#xff0c;分别指向前一个节点和后一个节点&#xff0c;在堆上分配空间&#xff0c;每插入一个元数都会分配空间&#xff0c;每删除一个元素都会释放空间 2、性能 ① 访问&#x…

C++语言学习(八)—— 继承、派生与多态(二)

目录 一、多继承 1.1 多继承中的二义性问题 1.2 虚基类 二、多态 2.1 静态绑定与静态多态 2.2 动态绑定与动态多态 三、运算符重载 3.1 重载、- -运算符 3.2 重载赋值运算符 3.3 重载输出流<<、输入流>>运算符 3.3.1 重载输出流&#xff08;<<&am…

VirtualBox下安装Centos7.9虚拟机的踩坑记录

目录 0 背景1 安装Centos7.91.1 下载iso镜像1.2 正常安装虚拟机1.3 将用户添加到sudoers并免密1.4 更新yum源1.5 配置静态IP1.6 通过ssh工具传文件1.7 总结 0 背景 最近搞了个便宜的低配台式机用来敲代码&#xff0c;主要是嫌弃笔记本屏幕太小了&#xff0c;想用个大屏。 然后我…

129页《战略推演:获取竞争优势的思维与方法》

知识星球APP搜索【战略咨询文库】&#xff0c;下载700多份资料 一、战略思维 差异化战略 产品或服务差异化&#xff1a;通过提供独特的产品特性、功能、设计或品质&#xff0c;满足特定客户群体的需求&#xff0c;从而与竞争对手区分开来。例如&#xff0c;苹果公司以其创新…