打家劫舍----背包dp

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

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

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

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

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

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

于是我开始写代码:

第一版:

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

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

相关推荐
五条凪1 小时前
简单理解 BM25 与 TF-IDF
人工智能·算法·搜索引擎·全文检索·tf-idf
行者全栈架构师1 小时前
【码动四季】Spring Boot 可观测性体系:Micrometer + OpenTelemetry + Grafana 全链路搭建
java·算法·架构
TCW11211 小时前
AI底层系列:用C++实现线性代数的公式推导与算法设计-8.线性变化(3)
c++·人工智能·算法
皓月斯语2 小时前
B3849 [GESP样题 三级] 进制转换 题解
c++·算法·题解
中微极客2 小时前
剪枝与量化:让YOLO在边缘设备上高效部署
算法·yolo·剪枝
牢姐与蒯3 小时前
双指针算法
数据结构·算法
Hesionberger3 小时前
LeetCode406:重建身高队列精髓解析
开发语言·数据结构·python·算法·leetcode
不要葱花3 小时前
接下来我将复现 10 篇强化学习算法:第 3 篇,一杯喜茶,搞定 Search-R1
算法·面试
geovindu4 小时前
CSharp: Recursion Algorithm
开发语言·后端·算法·c#·递归算法