动态规划-LCR 089.打家劫舍-力扣(LeetCode)

一、题目解析

结合示例1,我们能得知对于小偷而言不能连续偷相连的房间,且需要保证偷窃的金额最高。

二、算法解析

1.状态表示

我们想知道到最后一个房子时所偷窃的最高金额,所以dpi表示在i位置时,所偷到的最大价值。

但我们也可以知道在最后一个房子时,是可以选择是否偷窃的,所以根据这个又能细化状态。

fi表示:到达i位置时,偷取最后一个房子,此时的最大金额

gi表示:到达i位置时,不偷最后一个房子,此时的最大金额

2.状态转移方程

省流:fi = numsi+gi-1

gi = max(fi-1,gi-1)

3.初始化

f0=nums0,g0=0

4.填表顺序

从左往右填表并且两个表一起填写

5.返回值

我们需要知道到最后位置的最大金额,所以return max(fi-1,gi-1)

先跟着思考一番,在自己动手写代码,链接:LCR 089. 打家劫舍 - 力扣(LeetCode)

三、代码示例

cpp 复制代码
class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        vector<int> f(n),g(n,0);
        f[0] = nums[0];
        for(int i = 1;i<n;i++)
        {
            f[i] = g[i-1]+nums[i];
            g[i] = max(f[i-1],g[i-1]);
        }
        return max(f[n-1],g[n-1]);
    }
};

看到最后,如果对您有所帮助还请点赞、收藏、关注,点点关注不迷路,我们下期再见!

相关推荐
HZY1618yzh5 小时前
下一代编程语言出炉
c++·算法
CoderYanger5 小时前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
wyhwust6 小时前
No1-绪论
c++
kiracrimson6 小时前
选择排序与快速排序:一次选极值,一次分区间
算法·排序算法
无名猿6 小时前
C++ 对象内存模型:vtable 布局、多继承 vptr、RTTI 与 dynamic_cast 走查
c++·内存管理·调试技巧·现代c++
All for pursuit.6 小时前
【动态规划-8】152.乘积最大子数组
数据结构·c++·算法·leetcode·动态规划
信奥卷王6 小时前
[GESP202512 六级] 路径覆盖
数据结构·算法
INGNIGHT6 小时前
1861 · 老鼠跳跃(坐标型dp)
数据结构·c++
Lazionr6 小时前
手撕 unordered_set 和 unordered_map,剖析哈希表底层实现
c++·算法
0+1116 小时前
算法 --归并排序
数据结构·算法·排序算法