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

一、题目解析

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

二、算法解析

1.状态表示

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

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

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

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

2.状态转移方程

省流:f[i] = nums[i]+g[i-1]

g[i] = max(f[i-1],g[i-1])

3.初始化

f[0]=nums[0],g[0]=0

4.填表顺序

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

5.返回值

我们需要知道到最后位置的最大金额,所以return max(f[i-1],g[i-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]);
    }
};

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

相关推荐
你撅嘴真丑2 小时前
第九章-数字三角形
算法
在路上看风景2 小时前
19. 成员初始化列表和初始化对象
c++
uesowys2 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
zmzb01032 小时前
C++课后习题训练记录Day98
开发语言·c++
ValhallaCoder2 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮2 小时前
AI 视觉连载1:像素
算法
念风零壹3 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
智驱力人工智能3 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥4 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风4 小时前
代码随想录第十五天
数据结构·算法·leetcode