每日OJ题_简单多问题dp①_力扣LCR 089. 打家劫舍

目录

[力扣面试题 17.16. 按摩师](#力扣面试题 17.16. 按摩师)

解析代码


力扣LCR 089. 打家劫舍

三道一样/类似的题:

LCR 089. 打家劫舍

198. 打家劫舍

面试题 17.16. 按摩师

难度 中等

一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组 nums ,请计算不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。

示例 1:

复制代码
输入:nums = [1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

复制代码
输入:nums = [2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
     偷窃到的最高金额 = 2 + 9 + 1 = 12 。

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 400
cpp 复制代码
class Solution {
public:
    int rob(vector<int>& nums) {

    }
};

解析代码

以某个位置为结尾,结合题目要求,dpi 表示:选择到 i 位置时,此时的最大金额。

但是我们这个题在 i 位置的时候,会面临选择 或者不选择两种抉择,所依赖的状态需要细分:

  • fi 表示:选择到 i 位置时, numsi 必选 ,此时的最大金额;
  • gi 表示:选择到 i 位置时, numsi 不选 ,此时的最大金额。

因为状态表示定义了两个,因此状态转移方程也要分析两个:

  • 对于 fi : 如果 numsi 必选,那么仅需知道 i - 1 位置在不选的情况下的最大金额 , 然后加上 numsi 即可,因此 fi = gi - 1 + numsi 。
  • 对于 gi : 如果 numsi 不选,那么 i - 1 位置上选或者不选都可以。因此,我们需要知道 i - 1 位置上选或者不选两种情况下的最大金额 ,因此 gi = max(fi - 1, gi - 1) 。
cpp 复制代码
class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        // f[i], g[i]表示:选择到 i 位置时,此时的最大金额。
        vector<int> f(n);
        auto g = f;
        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]);
    }
};
相关推荐
小羊没烦恼!6 分钟前
关于大型asp.net应用系统的架构-架构的选择
java·服务器·开发语言·前端·c#
夏幻灵18 分钟前
前端八股:JavaScript 深拷贝详解:实现方式、递归原理与循环引用
开发语言·前端·javascript
梦帮科技31 分钟前
【3.0修订版】音乐权利 NFT:MusicRightsNFT 的确权思想与授权关联
网络协议·算法·web3·区块链·密码学·智能合约·零知识证明
傲世仙尊33 分钟前
C++起步-命名空间解决命名冲突与cin-cout缺省参数
开发语言·c++
hljqwb37 分钟前
java服务异常日志只打印异常类型,没有堆栈定位分析(十)
java·开发语言
ym hyd 11140 分钟前
生鲜超市库存管理信息系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
haerapi42 分钟前
KingbaseES 全文检索实战之前:先建立中文搜索的可解释基线
开发语言·python·全文检索
Dfreedom.43 分钟前
基于PCA的光谱物质识别分析
算法
徐小黑ACG43 分钟前
Golang 基础02 控制语句
开发语言·后端·golang
liyunlong-java1 小时前
敏感词过滤完整指南(DFA 字典树)
java·开发语言·spring