算法题每日一练---第37天:打家劫舍

简介: 你是一个专业的小偷,计划偷窃沿街的房屋。

3.png

一、问题描述


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


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


题目链接:打家劫舍

二、题目要求


样例1

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


样例2

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


数据范围

  • 1 <= nums.length <= 100`
  • 0 <= nums[i] <= 400`


考察

动态规划中等题型
建议用时5~15min


三、问题分析


这也是一道比较典型的动态规划问题,动态规划没做过的可以看这一篇入门题解:


算法题每日一练---第34天: 青蛙跳台阶


还是用我们的三步走,老套路:


第一步含义搞懂:


首先,使用动态规划一维数组就可以解决问题,那么这个dp[i]到底代表什么?

看看题目问什么,在不触犯警报的情况下,偷到的最大金额数,那么dp[i]就代表从截止到第i个房子,最大的金额数。


第二步变量初始:


假如房子数目为1,那么dp[0]=nums[0]
假如房子数目为2,那么dp[1]=max(nums[0],nums[1])


第三步规律归纳:


那么到底有什么规律呢?我把样例2详细列出来你看一下:

16.png

从第三个数开始,dp[i]是不是满足

dp[i]=max(dp[i−2]+nums[i],dp[i−1])关系式

三步走,打完收工!


四、编码实现


#include<iostream>#include<algorithm>usingnamespacestd;
intmain()
{
intn,nums[105],i,dp[105];//初始化cin>>n;//输入数组的大小,n为0或1力扣要判断的,我这里省去了for(i=1;i<=n;i++)//输入数组的元素cin>>nums[i];
dp[1]=nums[1],dp[2]=max(nums[1],nums[2]);//初始化动态规划前两位for(i=3;i<=n;i++)//第三位开始循环    {
dp[i]=max(dp[i-1],nums[i]+dp[i-2]);//找到规律    }
cout<<dp[n];//输出结果return0;
}


五、测试结果

17.png

相关文章
|
6天前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
17 0
|
2月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
63 2
|
5月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 198. 打家劫舍 算法解析
☆打卡算法☆LeetCode 198. 打家劫舍 算法解析
|
5月前
|
算法 JavaScript
|
11月前
|
算法
代码随想录算法训练营第四十七天 | LeetCode 198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III
代码随想录算法训练营第四十七天 | LeetCode 198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III
49 1
|
5月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 213. 打家劫舍 II 算法解析
☆打卡算法☆LeetCode 213. 打家劫舍 II 算法解析
|
5月前
|
存储 算法 程序员
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
125 0
算法练习Day48|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
算法练习Day48|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
|
算法
算法创作|打家劫舍
算法创作|打家劫舍
85 0
|
算法 C++
【每日算法Day 106】打家劫舍系列最后一弹,撑住你就赢了!
【每日算法Day 106】打家劫舍系列最后一弹,撑住你就赢了!