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

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

相关推荐
冷崖3 小时前
原子锁操作
c++·后端
旖旎夜光7 小时前
C++(17)
c++·学习
Larry_Yanan8 小时前
Qt多进程(三)QLocalSocket
开发语言·c++·qt·ui
superman超哥8 小时前
仓颉语言中元组的使用:深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
LYFlied9 小时前
【每日算法】LeetCode 153. 寻找旋转排序数组中的最小值
数据结构·算法·leetcode·面试·职场和发展
唐装鼠9 小时前
rust自动调用Deref(deepseek)
开发语言·算法·rust
Lucas555555559 小时前
现代C++四十不惑:AI时代系统软件的基石与新征程
开发语言·c++·人工智能
ytttr87310 小时前
MATLAB基于LDA的人脸识别算法实现(ORL数据库)
数据库·算法·matlab
_MyFavorite_10 小时前
cl报错+安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
charlie11451419110 小时前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++