day50 --动态规划9

  •  198.打家劫舍 
  •  213.打家劫舍II  
  •  337.打家劫舍III

第一题:打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

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

  • 示例 1:
  • 输入:[1,2,3,1]
  • 输出:4

0、思路:站在房屋前,只考虑偷或者不偷,做选择的前提是考虑的是前一个房屋和前两个房屋是否被偷,因为要间隔的偷。-。-。-

1、动态规划三部曲

(1)确定dp数组以及下标的含义

dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]

(2)确定递推公式

dp[i]的的决定因素是第i间房偷不偷

如果偷:dp[i]=dp[i-2]+nums[i],因为第i-1房肯定不偷

如果不偷:dp[i]=dp[i-1],,不偷的话手里的钱就跟i-1房间时一样,i-1的时候也可能没偷,但是判断依据是相邻的房间

然后dp[i]取最大值:dp[i]=max(dp[i-2]+nums[i],dp[i-1])

(3)dp数组如何初始化

从递推公式dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);可以看出,递推公式的基础就是dp[0] 和 dp[1]

dp[0]一定是nums[0],dp[1]的取值来源于nums[0]和nums[1],选一个偷

dp[1]=max(nums[0],nums[1])

(4)确定遍历顺序

dp[i]既然取决于dp[i-1]和dp[i-2],那么一定是从前到后遍历

(5)举例推导

第二题:打家劫舍2

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

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

示例 1:

  • 输入:nums = [2,3,2]

  • 输出:3

  • 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

0、思考

这里的房间变成了环状,也就是第一件房和最后一间房相邻。如果第一间房偷了,最后一间就不能偷,只能偷一个

有三种思考方式:(1)直接不考虑头和尾,(2)只考虑头,不考虑尾(3)只考虑尾,不考虑头

然后选取其中最大的

只是多了一步求最大情况,求最大金额的步骤还是一样

第三题:打家劫舍3

之前是一排数组,现在是一棵树,要求不能偷两个直接相连的房子。dp树

有树肯定有遍历,就看是前序遍历还是中序,后序。问题是直接相连的树不能偷,所以应该是后序遍历左右根,可以偷两个孩子,但是会他们直接相连的父节点不可以偷。

本题重点在于dp数组,dp数组是一个长度为2的数组,每次累计记录最大的值。

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

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

相关文章

堆(二叉树,带图详解)

一.堆 1.堆的概念 2.堆的存储方式 逻辑结构 物理结构 2.堆的插入问题 3.堆的基本实现(代码)(以小堆为例) 1.堆的初始化 2. 向上调整 3.插入结点 4. 交换函数、堆的打印 5.向下调整 6.删除根节点并调整成小根堆 7.获取堆…

3D模型格式转换工具HOOPS Exchange助力SIMCON搭建注塑项目

行业:设计与制造 / 注塑成型 / 模拟 挑战:注塑成型商面临着以高效的方式为客户生产零件的挑战。需要大量的试验才能生产出适合的零件,同时模具需要进行多次物理修改,每次修改周期最长需要四个星期,成本高达四到五位数…

第1章 Java、IDEA环境部署与配置

JavaEE简介与IDE环境部署 课程目录 JavaEE简介JDK环境部署IntelliJ IDEA环境部署 JavaEE简介 1. JavaEE是什么? Java EE(Java Platform,Enterprise Edition)是sun公司(2009年4月20日甲骨文将其收购)推…

Java反射获取内部类方法

Java反射获取内部类方法 结论一、案例准备二、测试方法:使用反射获取类的成员内部类和方法具体操作具体操作(使用getDeclaredClasses) 结论 Java 通过反射可以获得内部类,包括内部类属性信息和方法。 一、案例准备 创建了一个类…

Python自动处理pptx:新建、另存、添加幻灯片、添加标题、插入文本图片图形、提取文本

Python-pptx库是一个用于创建、更新和读取Microsoft PowerPoint .pptx 文件的Python库。它允许我们使用Python脚本自动化PowerPoint文件的创建、更新和读取操作,是一个非常方便自动化处理PPTX的工具。 安装 pip install python-pptx创建 from pptx import Prese…

【Note】链式存储结构

设计不同的结点结构,可以构成不同的链式存储结构。常用的有:二叉链表、三叉链表、线索链表(用空链域存放指向前驱或后继的线索)。 二叉链表存储 VS 一般二叉树 二叉链表 VS 二叉树 知识点: 一个二叉链表由根指针root…

vue3+vite在线预览pdf

效果图 代码 <template><div class"pdf-preview"><div class"pdf-wrap"><vue-pdf-embed :source"state.source" :style"scale" class"vue-pdf-embed" :page"state.pageNum" /></div…

Python:实现日历到excel文档

背景 日历是一种常见的工具,用于记录事件和显示日期。在编程中,可以使用Python编码来制作日历。 Python提供了一些内置的模块和函数,使得制作日历变得更加简单。 在本文,我们将探讨如何使用Python制作日历,并将日历输出到excel文档中。 效果展示 实现 在代码中会用到cale…

spring常见问题汇总

1. 什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务 逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c; 为开…

25.2 MySQL 运算符

1. 伪表 在MySQL中, DUAL是一个特殊的单行, 单列的虚拟表, 主要用于在SELECT语句中计算表达式或执行函数, 而不需要从实际的数据表中检索数据. 使用DUAL的原因主要有以下几点:* 1. 简化计算: 通过在SELECT语句中使用DUAL, 可以方便地计算表达式或执行函数, 而无需创建临时表或…

thinkphp5使用phpmail发送qq邮件

目录 1、使用composer 工具安装&#xff0c;在tp5根目录下执行 2、封装发送邮件方法 3、控制器中调用 4、运行后结果 1、使用composer 工具安装&#xff0c;在tp5根目录下执行 composer require phpmailer/phpmailer 安装成功后显示下面目录 2、封装发送邮件方法 function…

linux中好玩的数据流定向和管道命令一

知识点复习&#xff1a; 什么是数据流定向&#xff0c;个人理解就是将 一些结果信息不打印在屏幕上&#xff0c;而是定位在某一个文件里面 ll /wdf > file 会覆盖file的原内容 ll /wdf >> 会追加到原文件后面 比如在自己的目录新建1.TXT&#xff0c; 2.txt ll /…

echarts 仪表盘统计图

<!--仪表盘统计图--><div class"ybptx" ref"btryzb"></div>mounted(){this.getBtData();}getBtData() {let chart this.$echarts.init(this.$refs.btryzb);let data_czzf this.cznlzhpj.czzfs;let option {series: [{name: 内层数据刻…

asp.net网球馆计费管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net网球馆计费管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 aspnet网球馆计费管理系统1 二、…

Vue 项目进行 SEO 优化

SSR 服务器渲染 服务端渲染, 在服务端 html 页面节点, 已经解析创建完了, 浏览器直接拿到的是解析完成的页面解构 关于服务器渲染&#xff1a;Vue 官网介绍 &#xff0c;对 Vue 版本有要求&#xff0c;对服务器也有一定要求&#xff0c;需要支持 nodejs 环境。 优势: 更好的 …

01. 板载硬件资源和开发环境

一、板载硬件资源 STM32F4VGT6-DISCOVERY硬件资源如下&#xff1a; (1). STM32F407VGT6微控制器有1M的FLASH存储器&#xff0c;192K的RAM&#xff0c;LQFP100封装 (2). 板上的ST-LINK_V2可以使用选择的方式把套件切换成一个独立的ST-LINK/V2来 使用&#xff08;可以使用SWD…

NPI加速器在烽火科技SMT车间的应用:贴片机程序制作效率的革新

烽火科技&#xff0c;一个在国内颇具知名度的高科技企业&#xff0c;坐落于武汉光谷的SMT车间中&#xff0c;机器嗡嗡作响&#xff0c;作业员们忙碌地进行着生产。工厂使用的是ASM的贴片机&#xff0c;使用Sipalce Pro作为其编程软件。然而&#xff0c;在高效的生产线背后&…

Hafnium简介和构建

安全之安全(security)博客目录导读 目录 一、Hafnium简介 二、Hafnium构建 2.1.1 先决条件 2.1.1.1 构建Host 2.1.1.2 工具链 2.1.1.3 依赖 2.1.1.4 获取源码 2.1.2 构建 一、Hafnium简介 可信固件为Armv8-A、Armv9-A和Armv8-M提供了安全软件的参考实现。它为SoC开发人…

OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验

1. 介绍 感知哈希算法&#xff08;Perceptual Hash Algorithm&#xff0c;简称pHash&#xff09; 是哈希算法的一种&#xff0c;主要用来做相似图片的搜索工作。 2. 原理 感知哈希算法&#xff08;pHash&#xff09;首先将原图像缩小成一个固定大小的像素图像&#xff0c;然后…

FPGA驱动步进电机-Sin曲线加速

FPGA驱动步进电机-Sin曲线加速 基本实现原理实际仿真的波形程序 以下由特权同学的FPGA文档摘取 Sin 曲线控制 step 脉冲信号生成的功能框图如下所示。 基本实现原理 ①判断步进电机驱动的目标频率 stepper_delay_target 与当前频率 stepper_delay_current的值是否一致&#…