打家劫舍----背包dp

思路;首先读了一遍题目发现是读懂了,刚开始以为要用贪心,但是不对,贪心是求局部最优解,但很明显这道题不是求局部最优,不是局部最优得到,而是选择局部最优得到,因为需要选择局部最优,所以需要使用动态规划。

核心就是,贪心只会做单向的决定,不会回头考虑其他的分支,即当前位置他因为局部的规则(比如选最大)他选择了那么他就不会考虑如果不选择当前的节点能不能得到最大,而这道题的房间因为相邻会报警,所以当前房间有选or不选这两种情况。所以使用动态规划。

那么动态规划的下标和dp数组的含义应该如何确定呢,用为题目要求的是当前房间下能盗取的最大的钱数,所以下标i表示当前是在第几个房间,那么dp[i]就是表示在当前这个房间下能取得的最大值。

那么如何推导出状态转移方程呢,首先举出一个1,2的例子 我写的状态转移方程是,dp(2) = Math.max(dp(1),nums[1])(注意这里的数组下标是从0开始)

这个式子在1,2是成立的,那么如果举出的例子是1,2,2呢

于是我根据1,2,2这个样例写出了dp(i) = Math.max(dp(i - 1),dp(i - 2) + nums[i - 1];

于是我开始写代码:

第一版:

看到这个报错以为自己状态转移方程写错了,没有很快的想到原因,我应该把执行的每个房间的最大值给列出来这样可以更好的发现问题,

然后发现问题是这里写错了修改后的代码:

相关推荐
兰令水1 小时前
topcode【随机算法题】【2026.5.17打卡-java版本】
java·算法·leetcode
吃好睡好便好1 小时前
在Matlab中绘制柱面图
开发语言·学习·算法·matlab
沐怡旸1 小时前
彻底告别解析崩溃:深入解析大模型 Structured Outputs(结构化输出)技术
算法
giszz1 小时前
量子算法简化解析:肖尔算法与格罗弗算法核心原理
算法·量子计算
微风欲寻竹影1 小时前
队列(Queue)-详解
java·数据结构
熬夜敲代码的猫3 小时前
教你如何使用set和map
c++·算法
YL2004042610 小时前
048路径总和III
数据结构·dfs
z2005093010 小时前
每日简单算法题——————跟着卡尔
算法
️是7811 小时前
信息奥赛一本通—编程启蒙(3395:练68.3 车牌问题)
数据结构·c++·算法