动态规划-打家劫舍Ⅱ

news2024/9/22 15:37:09

该题是打家劫舍Ⅰ的升级版并与其相关,如果对其感兴趣的话可以先看看打家劫舍Ⅰ


 题目描述

一个专业的小偷,计划偷窃一个环形街道上沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。

给定一个代表每个房屋存放金额的非负整数数组 nums ,请计算在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

解题思路

该题与打家劫舍Ⅰ的区别在于这是一个环形街道。

解决这个问题的一种方法是将其拆分为两个子问题:

  • 不考虑第一个房屋,只考虑从第二个房屋到最后一个房屋的最大金额。

  • 不考虑最后一个房屋,只考虑从第一个房屋到倒数第二个房屋的最大金额。

对于每个子问题,我们可以使用标准的动态规划方法来解决。其中的rob1()函数是打家劫舍Ⅰ中的解决方法。

 

class Solution {
public:
    int rob1(vector<int>& nums, int begin, int end) {
        if (begin > end)
            return 0;
        int n = end - begin + 1;
        vector<int> dp(n, 0);
 
        if (n == 1)
            return nums[begin];

        dp[0] = nums[begin];                       // 偷第一家
        dp[1] = max(nums[begin], nums[begin + 1]); // 偷第一家或第二家

        for (int i = 2; i < n; ++i) {
            // 对于第i家,有两种选择:偷或不偷
            // 如果偷第i家,则不能偷第i-1家,最大金额为dp[i-2] + nums[i]
            // 如果不偷第i家,则最大金额为dp[i-1](即偷到第i-1家的最大金额)
            dp[i] = max(dp[i - 2] + nums[i+begin], dp[i - 1]);
        }
        return dp[n - 1];
    }
    int rob(vector<int>& nums) {
        int n = nums.size();
        return max(nums[0] + rob1(nums, 2, n - 2), rob1(nums, 1, n - 1));
    }
};

rob1函数中:

  • 我们首先处理了一些基本情况,比如没有房屋、只有一家房屋或只有两家房屋的情况。
  • 然后,我们使用动态规划来解决更一般的情况。我们定义了一个dp数组,其中dp[i]表示从第一家房屋到第i+begin家房屋(在nums数组中的索引)为止能偷到的最大金额。注意,这里的i是相对于dp数组的索引,而beginnums数组中当前考虑的子范围的起始索引。
  • 我们通过遍历dp数组(从索引2开始,因为前两家已经初始化)来填充它。对于每个i,我们计算偷第i+begin家房屋和不偷第i+begin家房屋两种情况下的最大金额,并取两者中的较大值作为dp[i]的值。
  • 最后,我们返回dp[n-1],即从第一家房屋到当前考虑的子范围的最后一家房屋为止能偷到的最大金额。

rob函数中:

  • 我们首先处理了一些特殊情况,比如房屋数量为0或1的情况。
  • 然后,我们分别调用rob1函数来计算不偷第一家房屋(即考虑从第二家到最后一家)和不偷最后一家房屋(即考虑从第一家到倒数第二家,并加上第一家的金额)的情况下的最大金额。
  • 最后,我们返回两者中的较大值作为结果。

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

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

相关文章

深度学习(10)---Vision Transformer详解

文章目录 一、简介二、模型结构2.1 整体架构2.2 Linear Projection of Flattened Patches2.3 Transformer Encoder2.4 MLP Head 三、ViT模型搭建参数四、思考题 一、简介 1. Vision Transformer&#xff08;ViT&#xff09;是一种基于Transformer架构的深度学习模型&#xff0c…

UE基础 —— Playing and Simulating

目录 Play In Editor 运行&#xff08;Play&#xff09; Play Modes PIE Console Simulate In Editor 可以随时在虚幻编辑器中预览游戏&#xff0c;无需将其构建为独立的应用程序&#xff1b;能快速调整游戏玩法和资产&#xff0c;并了解相应调整带来的结果&#xff1b; …

vue全局参数

/* eslint-disable no-new */ new Vue({el: #app,router,components: { App },template: <App/>,data:function(){return{wbWinList: [] // 定义的变量&#xff0c;全局参数}}, }) //使用全局参数 // this.$root.backgroundColor 666;其它页面如果想监听改变 //监听全…

【JAVA基础】this关键字与final关键字

文章目录 this关键字final关键字Java值传递 this关键字 this代表当前对象&#xff0c;有时候不太方便直接使用对象&#xff0c;可以用this **用法1&#xff1a;**this.属性名 在类中调用全局变量 举个例子&#xff1a; public class Student1 {public String name;public S…

密文域可逆信息隐藏与掩码自动编码器(MAE)

原文题目&#xff1a;Reversible data hiding in encrypted images based on pixel-level masked autoencoder and polar code Source: Signal Processing Authors: Zhangpei Cheng, Kaimeng Chen , Qingxiao Guan 发表年份&#xff1a;2024年 学习这篇文章主要原因是结合了…

Leetcode 46.全排列

注意的点&#xff1a; 1、回溯本质就是搜索树的树枝&#xff0c;维护三个核心变量&#xff1a;path&#xff08;需要恢复现场&#xff09;&#xff0c;visited&#xff08;需要恢复现场&#xff09;&#xff0c;以及res 解法&#xff1a;回溯算法 class Solution:def permut…

iphone问题笔记

拼音打字显示一些不相干的词 原因&#xff1a;开启了自动改正&#xff0c;傻逼iphone总以为你打错了。 计算器没有退格键&#xff1f; 解决方法&#xff1a;按住数字往右滑是退格。 关机重启必须去设置里&#xff1f; 连按五次锁屏可以选择关机。

[新手入门]1台电脑+1个电视+2个软件(sunshine+moonlight) 解决黑神话悟空没有hdmi线的痛...

sunshinemoonlight 解决黑神话悟空 本地串流投屏 背景:偶然间在B站发现了sunshinemoonlight方案,替代hdmi线,做本地串流...于是心灵手巧的我开始尝试踩坑之路:1.准备安装包2.开始安装2.1 笔记本windows安装sunshine2.2 遇到了第一个坑.Fatal: ViGEmBus is not installed or run…

matplotlib绘制子图以及局部放大效果

需求&#xff1a;绘制1*2的子图&#xff0c;子图1显示两个三角函数&#xff0c;子图2显示三个对数函数&#xff0c;子图2中对指定的区域进行放大。 绘图细节&#xff1a; 每个子图中每个函数的数据存放到一个列表中&#xff0c;然后将每个子图的数据统一存到一个列表中&#…

亿发详解:ERP系统选择的艺术——中小企业如何避免实施陷阱?

有很多中小工厂反应&#xff0c;工厂上了一套精细化ERP系统后&#xff0c;却发现为了适应系统&#xff0c;不仅效率没提高&#xff0c;工作量还变大了&#xff0c;很多功能也根本用不到。这种情况其实并不少见。许多企业在引入ERP系统后&#xff0c;反而遇到了各种问题。说到底…

RocketMQ学习(一)

文章目录 参考1. MQ 介绍1.1 为什么要用 MQ应用解耦流量削峰数据分发 1.2 MQ 的优点和缺点1.3 各种 MQ 产品的比较 2. RocketMQ 快速入门2.1 准备工作2.1.1 下载 RocketMQ2.2.2 环境要求安装jdk 2.2 安装 RocketMQ2.2.1 安装步骤2.2.2 目录介绍 2.3 启动 RocketMQ示例 2.4 测试…

配置错误酿大祸:.env文件泄漏导致数千组织云端数据遭受攻击

攻击者从不安全存储在数以万计的 Web 应用程序的环境变量中收集 Amazon Web Services 密钥和各种云服务的访问令牌。 Unit 42 研究人员发现了一种数据勒索活动&#xff0c;该活动主要是攻击者通过从不安全地存储在 Web 服务器上的环境 &#xff08;.env&#xff09; 文件&#…

空气净化器怎么选能除猫毛?宠物空气净化器除味好的分享

我有一位呼吸科医生朋友&#xff0c;他自己也养猫。他常向我们这群养宠物的朋友传授关于宠物毛发潜在危害的知识&#xff0c;引来不少幽默的回应&#xff1a;“既然如此&#xff0c;干脆把猫送走算了&#xff1f;”开玩笑&#xff0c;自己养大的猫跟亲生的有什么区别。我注意到…

搭建FTP服务器,通过浏览器访问FTP服务器,测试终端上传的音频文件。

文章目录 引言I 搭建FTP服务器II 浏览器访问FTP文件PC端浏览器访问iphone-safari浏览器访问FTP设置Mac-Safari浏览器访问FTP设置III FTP基础知识FTP客户端数据连接: 被动模式(PASV)引言 需求: 通过浏览器访问,测试终端通过FTP上传的语音文件,支持直接播放语音文件。 建议…

[数据集][目标检测]风力发电机叶片损伤检测数据集VOC+YOLO格式5029张8类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5029 标注数量(xml文件个数)&#xff1a;5029 标注数量(txt文件个数)&#xff1a;5029 标注…

【MATLAB学习笔记】绘图——分割绘图背景并填充不同的颜色

目录 前言分割背景函数示例基本绘图分割背景函数的使用保存图片 总代码总结 前言 在MATLAB中&#xff0c;使用窗口对象的Color属性可以轻松地设置不同的背景颜色&#xff0c;但是只能设置一种单一颜色。若需要将绘图背景设置成多种颜色&#xff0c;比如左右两边不同的颜色&…

Gradio.NET支持 .NET 8 简化 Web 应用开发

目录 前言 Gradio.NET Gradio.NET 使用 1、创建项目 2、安装 Gradio.Net 3、示例代码 Gradio.NET 示例 1、Layout 2、Form 3、Media 4、Chatbot 5、Progress Gradio.NET 应用 项目地址 总结 最后 前言 Gradio.NET 是 Gradio 在 .NET 平台上的移植版本。Gradio …

内容为王:数字化营销的致胜法宝

​在当今数字化时代&#xff0c;营销环境发生了巨大变化。消费者被海量信息包围&#xff0c;注意力成为必争资源。在这种情况下&#xff0c;“内容为王” 的理念愈发凸显其重要性&#xff0c;成为数字化营销的致胜法宝。 1. 吸引用户注意力 高质量、有价值的内容能够在众多信息…

推荐好古文《马说》

韩愈 世有伯乐&#xff0c;然后有千里马。千里马常有&#xff0c;而伯乐不常有。故虽有名马&#xff0c;只辱于奴隶人之手&#xff0c;骈死于槽枥之间&#xff0c;不以千里称也。 马之千里者&#xff0c;一食或尽粟一石。食马者不知其能千里而食也。是马也&#xff0c;虽有千…

【Python最全系统学习路线】:千万不要盲目自学Python,顺序真的很重要!

如果你一直想学Python&#xff0c;但是不知道如何入手&#xff0c;那就别犹豫了。这篇文章就是为你写的。 根据我自己的经验来说&#xff0c;想从零开始学Python&#xff0c;以后也确实想找相关的工作&#xff0c;基本是下边这三种方式&#xff1a; 继续上学。报个这方面的专业…