动态规划:打家劫舍

打家劫舍算法:动态规划思路与实现解析 我们定义dp[i]表示偷窃到第i个房屋时,能得到的最高金额。这样就把原问题拆解成了一个个子问题,通过求解子问题的最优解来得到原问题的最优解。时间效率高:借助动态规划,将时间复杂度控制在OnO(n)On,线性的时间复杂度对于处理规模不大的数组非常高效,即使房屋数量达到上限 100 ,计算也能瞬间完成。逻辑清晰易扩展。 阅读详情

打家劫舍

题干:

给定一个nums[], nums[i]表示第i个房子里的资金,不能盗取相邻的两家否则会触发报警。求不触发报警情况下,最多可以盗取多少资金

nums = [2,7,9,3,1] // 答案:12

请添加图片描述

设计状态

定义最优状态数组dp=[],dp[i]表示不触发2报警情况下,打劫到第i家时盗取的最大资金。

解题思路

先算出局部最优解,用局部最优解递推出全局最优解。

步骤

当房子只有1间的时:

就直接盗取这间,dp[0]=nums[0] = 2

当房子有2间时:

不能盗取相邻的,因此二选一。

因此dp[1]=max(nums[0],nums[1])=max(2,7)=7

当房子有3间时:

不能盗取相邻的,前面已算出盗取1间和两间的最优解。不能盗取相邻的,所以3间有2种情况:

  1. 至第1间为止的最大获利+盗取第3间,最大收获为:dp[0]+nums[2]
  2. 至第2间为止的最大获利。最大收获为:dp[1]

最终,盗取3间最大获利为: dp[2] = max(dp[0]+nums[2],dp[1]) = max(11,7)=11

当房子有n间时:

当要求盗取第n间的最大获利时,前面我们已经算出了盗取至n-1和n-2的最大获利。那么此时有两种情况:

  1. 盗取第n间。就只能获得前面至n-2间的最大获利,因为相邻的n-1不能盗取,最终获利为:dp[n-2]+nums[n]

  2. 不盗取第n间。那么最大获利就是,前面算出的至前上一间房子为止的最大获利:dp[n-1]

最终,盗取n间的最大获利为:dp[n]=max(dp[n-2]+nums[n],dp[n-1])

代码编写(用js)

function  houseRobbery(){
    nums = [2,7,9,3,1] // 答案:12
    // 定义初始状态 dp[i] 表示打劫到第i家为止最大的资金
    dp = [nums[0]]
    // 状态转移方程: dp[i] = max(dp[i-1],dp[i-1]+nums[i])
    for(let i=1;i<nums.length;i++){
        if(i==1){
            dp[i] = max(dp[i], nums[i])
        }else{
            dp[i] = max(dp[i-1], dp[i-2]+nums[i])
        }
    }
    return "最大盗取获利为:"+dp[nums.length-1]+"\n"

}
/*
结果: 最大盗取获利为:12
*/
function max(a,b){
    return a > b ? a : b
}

总结:

动态规划的解题思路就是化大问题为小问题,通过局部最优解推出全局最优解。先求出1个元素时的最优解,通过第一个最优解去推出2个元素时的最优解,通过第二个最优解继续推出3个元素时的最优解。直到第n个。

此类问题为线性问题,处理起来还算简单。下一次开始将研究多维的问题的解法。

至于下次更新在什么时候。看看下周吧

用Python+OpenCV给斗地主做个‘外挂’:手把手教你写个桌面记牌器(附源码) 本文详细介绍了如何使用Python和OpenCV开发一个智能斗地主记牌器,包括环境搭建、图像采集与预处理、扑克牌识别技术及PyQt5界面设计。通过实战案例,帮助开发者掌握图像处理与界面开发的结合应用,提升游戏辅助工具的编写能力。 阅读详情

相关推荐

1.2 从“跟网”到“构网”:技术范式的历史性转变

新型电力系统面临"双高"特征带来的稳定性挑战,促使并网控制技术从"跟网型"向"构网型"范式转变。传统跟网型变流器作为受控电流源依赖强电网,存在短路电流能力有限、易失稳等缺陷;而构网型变流器模拟同步发电机特性,作为受控电压源具备自主建立电压/频率、提供虚拟惯性、增强短路容量和改善系统阻尼四大核心能力。这一技术范式转变使变流器从电网跟随者变为构建支撑者,成为解决新能源大规模接入稳定性的关键。

技术工作者 719

动态规划(二) —— 打家劫舍系列问题总结

除了背包系列问题,打家劫舍系列问题同样也是动态规划的经典题目。在这篇文章中荔枝将会把打家劫舍系列问题做一下总结,再仔细体会动态规划的思想,希望能帮到有需要的小伙伴~~~

荔枝当大佬的博客 642

ubuntu17.04 UHD 驱动出错

ubuntu 17.04 源码安装UHD

xrh003的博客 1万+

算法笔记:动态规划之打家劫舍问题

动态规划算法

weixin_53895623的博客 769

Verilog十大基本功2(testbench的设计 文件读取和写入操作 源代码)

需求说明:Verilog设计基础 内容       :testbench的设计 读取文件 写入文件 来自       :时间的诗 十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应。 端口分为 input,output 和 inout 类型产生激励信号的时候, input  对

时间的诗 5万+

手把手教你解决Realsense D455在ROS下IMU数据不输出的问题(附固件降级指南)

本文详细解析了Realsense D455在ROS环境下IMU数据不输出的问题,提供了固件降级和ROS配置的完整解决方案。通过版本兼容性分析和实战操作指南,帮助开发者快速恢复IMU数据流,优化机器人开发体验。

weixin_42531494的博客 371

动态规划解析以及简单demo

简介 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线.这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题称为多阶段决策问题。在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起

wangxuelei036的博客 7758

VxWorks系列 快速导航

Vxworks系列快速阅览导航

Mr.Sugarcane 1308

动态规划----解决“打家劫舍”问题

动态规划----解决“打家劫舍”问题

qq_63691275的博客 2044

9.6华为OD机试真题 新系统 - 少儿爬山闯关积分游戏 (Java/Py/C/C++/Js/Go)

2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型。

算法大师! 854

热力学仿真软件:Fluent_(8).材料属性设置

在 Fluent 中,材料属性主要包括密度、比热容、导热系数、黏度等物理性质。这些属性在不同的仿真场景中有着不同的作用,例如在流体仿真中,密度和黏度是必不可少的;在传热仿真中,导热系数和比热容是主要考虑的因素。如果所需的材料不在材料库中,或者需要对现有材料进行修改,用户可以自定义材料属性。在主菜单中选择Materials。点击打开材料编辑器。在材料编辑器中,点击Create按钮,输入新的材料名称。选择材料类型(如FluidSolid等)。在属性栏中填写所需的材料属性。

kkchenjj的博客 1491

动态规划:打家劫舍系列

针对首尾房间是否被偷,划分为以下几种情况,每种情况均可以使用"打家劫舍1"的代码求解。:环形问题不利于思考,可以将环形展开为线性结构,单独考虑首尾元素是否选取,分情况讨论。:每间房内都藏有一定的现金(非负整数数组),问一夜之内能够偷窃到的最高金额?:每间房内都藏有一定的现金(非负整数数组),问一夜之内能够偷窃到的最高金额?:利用"状态压缩"进行优化 →。

大胡子的博客 1811

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

算法刷题day34|动态规划:198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III

2.递推公式:如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。3.初始化:dp[0] 一定是 nums[0],dp[1]就是nums[0]和nums[1]的最大值即:dp[1] = max(nums[0], nums[1]);如果不偷第i房间,那么dp[i] = dp[i - 1],即考 虑i-1房。通过递归左节点,得到左节点偷与不偷的金钱。

qq_61936886的博客 621

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

力扣记录:动态规划3打家劫舍——198 打家劫舍,213 打家劫舍II,337 打家劫舍III

力扣记录:动态规划3打家劫舍——198 打家劫舍,213 打家劫舍II,337 打家劫舍III

Kiwi_fruit的博客 331

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

动态规划总结:背包、打家劫舍、买卖股票问题

背包问题、打家劫舍、买卖股票等

这是简介 214

Day42:动态规划 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

用start和end表示小偷能偷的房间范围,rob_能找出在某个范围内获得钱财的最大值,由于首尾不能同时取,所以小偷的偷窃范围只能是[0,nums.length-2]和[1,nums.length-1],这两个范围包括了首尾都不取的情况。你是一个专业的小偷,计划偷窃沿街的房屋。偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

2301_76352996的博客 994

代码随想录Day39:动态规划(打家劫舍、打家劫舍II、打家劫舍III)

参数为当前节点,返回的就是dp数组,dp数组(dp table)以及下标的含义:下标为0记录不偷该节点所得到的的最大金钱,下标为1记录偷该节点所得到的的最大金钱。第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。首先明确的是使用后序遍历。),然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])

m0_73724472的博客 1041

动态规划(六):打家劫舍

一、打家劫舍基础题 198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组nums,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 1、dp数组含义 dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i] 2、递推公式 对于第i间房屋,可以分为两种情况: 不偷第i间房屋:d

qq_42138662的博客 512

【动态规划:简单多状态dp问题】打家劫舍Ⅰ && 打家劫舍Ⅱ

摘要: 本文介绍了LeetCode中两道"打家劫舍"问题的动态规划解法。打家劫舍Ⅰ要求在不触发相邻房屋警报的情况下计算最大偷窃金额,通过维护偷窃和不偷窃两种状态的DP数组解决。打家劫舍Ⅱ在Ⅰ的基础上增加了房屋环形排列的限制,通过分情况处理首尾相连问题:分别计算偷首屋(则不能偷尾屋)和不偷首屋两种情况的最大值。两题均采用状态转移方程和动态规划表填充的方式,时间复杂度为O(n)。代码展示了如何通过修改Ⅰ的解法来适应Ⅱ的环形约束条件。

lirendada的博客 1370

动态规划:打家劫舍

文章目录动态规划:打家劫舍打家劫舍Ⅰ题目描述代码 动态规划:打家劫舍 打家劫舍Ⅰ 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 =

weixin_46292082的博客 241

算法第34天|动态规划:打家劫舍Ⅰ、打家劫舍Ⅱ、打家劫舍Ⅲ

打家劫舍1、如果遇到了对dp数组的前几个值定义,在进行遍历时,要思考前几个值还需不需要遍历2、这道题其实没有出现,前边的题型中出现过dp递推公式中出现min:在初始化的时候一定要注意普通位置要初始化为INT_MAX而不能是0.打家劫舍Ⅱ1、增加了额外条件圆形,所以分情况讨论:放首不放尾,放尾不放首,首尾都不放2、注意:dp[start] = max(nums[start],nums[start+1]);

m0_47408374的博客 1308

动态规划2:“打家劫舍”类问题

动态规划刷题笔记系列2:"打家劫舍"类问题

小辉的数学博客 856

LeetCode:动态规划-打家劫舍

一、打家劫舍 198:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 class Solution { public int rob(int[] nums) { int length =nums.length; if

sfklyqh的博客 441

经典动态规划:打家劫舍系列问题

预计阅读时间:8 分钟有好几位读者私下问我 LeetCode 「打家劫舍」系列问题(英文版叫 House Robber)怎么做,我发现这一系列题目的点赞非常之高,是比较有代表性和技巧性的...

fdl123456的博客 858

动态规划:leetcode 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

c++ leetcode 动态规划 打家劫舍问题

qq_52097561的博客 331

【动态规划:打家劫舍系列问题详解】

打家劫舍问题是个很经典的动态规划问题,类似的还有背包问题、凑零钱问题等等这类问题大部分都是择优选择,如:res = max(选择打劫,选择不打劫)提示:以下是本篇文章正文内容,下面案例可供参考。

m0_37698164的博客 1232
上一篇: 动态规划:最大子数组和
下一篇: 蓝桥web模拟题:菜单树检索
jayLog
博客等级 码龄7年 318粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jayLog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值