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

于是我开始写代码:

第一版:

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

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

相关推荐
金銀銅鐵15 小时前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC18 小时前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
To_OC1 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
刘马想放假2 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
05Kevin2 天前
lk每日冒险题--数据结构6.27
算法
To_OC2 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安3 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者3 天前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent