打家劫舍----背包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;

于是我开始写代码:

第一版:

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

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

相关推荐
AI服务老曹38 分钟前
车牌识别算法接入AI视频分析平台的流程和误报优化
人工智能·算法·音视频
神威难绷泪1 小时前
Linux应用软件编程:线程分离属性 互斥机制 同步机制 死锁
linux·开发语言·算法·线程
小星星闪亮登场1 小时前
图论--最小生成树(内含二分图)
数据结构·算法·图论·迭代加深·图搜索算法
ZC跨境爬虫2 小时前
LeetCode 219. 存在重复元素 II(滑动窗口 + 哈希表详解)
算法·leetcode·散列表
吞下星星的少年·-·2 小时前
The 2025 ICPC Asia East Continent Online Contest (I) A题(模拟+贪心)
算法·贪心·模拟
小程序设计2 小时前
【机械设计】磁粉检测机器人的设计与验证
算法·机器人
Navigator_Z2 小时前
LeetCode //C - 1220. Count Vowels Permutation
c语言·算法·leetcode
吃好睡好便好2 小时前
判断函数的使用
学习·算法·matlab·生活·判断函数
2601_956121972 小时前
线性DP(入门)
c++·算法·动态规划
2601_962201722 小时前
Java进阶,集合,Colllection,常见数据结构
java·数据结构·windows