动态规划-打家劫舍

题目描述

一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组 nums ,请计算 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

核心思想是利用动态规划来避免重复计算,并且考虑到相邻房屋不能同时偷窃的约束条件。

解题思路

解法一:

这种解法采用了动态规划(Dynamic Programming, DP)的思想来解决“打家劫舍”问题,但它在传统DP解法的基础上增加了一些额外的状态来更清晰地表示问题。在这个解法中,定义了三个数组:dpf 和 g,它们各自有不同的含义和用途。

数组定义
  • dp[i]:到位置 i 时(包括位置 i),可以抢到的最多钱。这个数组在最终答案的求解中并不是直接必要的,因为最终答案可以通过遍历 f 或 g 数组得到,但在这里它被用作一个中间变量来存储每个位置的最大收益。
  • f[i]:在位置 i 选择抢时,到位置 i 可以抢到的最多钱。这表示如果小偷决定抢第 i 个房子,那么他应该抢到的最大金额。
  • g[i]:在位置 i 不抢时,到位置 i 可以抢到的最多钱。这表示如果小偷决定不抢第 i 个房子,那么他应该抢到的最大金额。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值