leetcode 198. 打家劫舍

2023.8.19

打劫问题是经典的动态规划问题。先设一个dp数组,dp[i]的含义为:前 i 个房屋能盗取的最高金额。 每间房屋无非就是偷,或者不偷这两种情况,于是可以写出递推公式: ​​​​​​​ dp[i] = max(dp[i-2]+nums[i-1] , dp[i-1]);

由递推公式发现需要初始化dp[0]和dp[1],初始化完之后再对房屋进行遍历赋值即可。附上我的草稿图以供参考:

​​​​​​​

代码如下:

cpp 复制代码
class Solution {
public:
    int rob(vector<int>& nums) {
        vector<int> dp(nums.size()+1);
        dp[0] = 0;
        dp[1] = nums[0];
        for(int i=2; i<=nums.size(); i++)
        {
            dp[i] = max(dp[i-2]+nums[i-1] , dp[i-1]);
        }
        return dp[nums.size()];
    }
};
相关推荐
We་ct9 小时前
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置:二分查找实战
前端·算法·leetcode·typescript·二分
Sunshine for you9 小时前
C++中的对象池模式
开发语言·c++·算法
炽烈小老头9 小时前
【 每天学习一点算法 2026/03/25】在排序数组中查找元素的第一个和最后一个位置
学习·算法
刀法如飞9 小时前
AI时代,重温10大经典排序算法的思维
算法·排序算法·ai编程
啊我不会诶9 小时前
求LCA 倍增法
c++·算法·深度优先
CoderIsArt9 小时前
编译器构建中涉及的算法
数据库·算法
暮冬-  Gentle°9 小时前
编译器优化屏障使用
开发语言·c++·算法
云淡风轻~窗明几净9 小时前
关于TSP的海岸线猜想:SeaLine算法的逐层法(不同于逐点法)
数据结构·算法·动态规划·模拟退火算法
刀法如飞9 小时前
AI时代,重温10大经典排序算法
算法·排序算法·ai编程
m0_730115119 小时前
模板编程中的SFINAE技巧
开发语言·c++·算法