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()];
    }
};
相关推荐
Dave.B30 分钟前
vtkPolyDataConnectivityFilter 实用指南
算法·vtk
you-_ling1 小时前
数据结构:3.栈和队列
数据结构
细节处有神明1 小时前
开源数据之历史气象数据的获取与使用
人工智能·python·算法
小白开始进步1 小时前
JAKA Zu12 机械臂运动学算法深度解析(含可视化方案)
python·算法·numpy
梵刹古音1 小时前
【C语言】 递归函数
c语言·数据结构·算法
yongui478342 小时前
混凝土二维随机骨料模型 MATLAB 实现
算法·matlab
酉鬼女又兒2 小时前
JAVA牛客入门11~20
算法
努力学算法的蒟蒻2 小时前
day75(2.3)——leetcode面试经典150
面试·职场和发展
觉醒大王2 小时前
硕士/博士研究生避坑指南
笔记·深度学习·学习·自然语言处理·职场和发展·学习方法