动态规划-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]);
    }
};

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

相关推荐
洛水水4 分钟前
【力扣100题】81.寻找两个正序数组的中位数
数据结构·算法·leetcode
happymaker062633 分钟前
LeetCodeHot100——155.最小栈
算法
洛水水43 分钟前
【力扣100题】85.每日温度
算法·leetcode·职场和发展
Coder-magician1 小时前
《代码随想录》刷题打卡day15:二叉树part05
数据结构·c++·算法
Kurisu_红莉栖1 小时前
力扣56合并区间
算法·leetcode
Irissgwe1 小时前
算法的时间复杂度和空间复杂度
数据结构·c++·算法·c·时间复杂度·空间复杂度
随意起个昵称1 小时前
区间dp-基础题目3(永别)
c++·算法
周末也要写八哥1 小时前
有向图Hierholzer算法的另一种实现
算法
bIo7lyA8v1 小时前
算法调优中的性能回归与基准测试分析的技术8
算法·数据挖掘·回归
有点。1 小时前
C++贪心算法二(练习题)
c++·算法·贪心算法