题意:有一个整数序列,从中挑出一些数字,使得总和是最大,前提是,相邻的两个数字中只能挑其一。比如1 2 3 就只能挑2或者1和3。

思路:很直观的题,dp思想。降低规模,从小规模开始考虑。如果只有两个数字,那么结果很明显就能知道是其中之大者。假如已经知道了第 i 个之前的决策,那么第i+2个之前的决策也就知道了。前两个数字已经由人工得知,设为dp[0]和dp[1],那么dp[2]=max(dp[0]+nums[2], dp[1])。状态转移方程dp[i]=max(dp[i-1], dp[i-2]+num[i] )。

这里有状态压缩的思想,只不过状态只有两个,0和1代表前一个数字是否被挑出。即dp数组的下标,1代表i-1个之前的决策结果,也代表了第i-1个已经挑出,所以第i个不能再挑出来了;但是0代表i-2个之前的决策结果,也代表了i-1个不挑出。

 1 class Solution {
 2 public:
 3     int rob(vector<int>& nums) {
 4         if(nums.empty())    return 0;
 5         if(nums.size()==1)    return nums[0];
 6         if(nums.size()==2)    return max(nums[1],nums[0]);
 7
 8         int dp[2];
 9         dp[0]=nums[0];    //初始化也是很重要的
10         dp[1]=max(nums[0],nums[1]);
11
12         for(int i=2; i<nums.size(); i++)
13         {
14             int tmp=max(dp[1],dp[0]+nums[i]);
15             dp[0]=dp[1];//往前移。因为dp[0]已经没作用了
16             dp[1]=tmp;
17         }
18         return dp[1];
19     }
20 };

AC代码

转载于:https://www.cnblogs.com/xcw0754/p/4498047.html

LeetCode House Robber 家庭劫犯(dp)相关推荐

  1. LeetCode 486. 预测赢家(博弈DP)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个表示分数的非负整数数组. 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,-- . 每次一个 ...

  2. LeetCode 91. Decode Ways--动态规划DP的Python和Java解法

    题目地址: LeetCode 动态规划(Dynamic programming)系列题目:LeetCode 动态规划(Dynamic programming)系列题目 A message contai ...

  3. LeetCode House Robber III(动态规划)

    问题:给出一个树,只能隔一层取值,求最大值. 思路:方法一用dp(node)从当前结点开始可以取的最大值.当取node的值时,dp(node)=node.val + dp(node.left.left ...

  4. LeetCode House Robber II(动态规划)

    问题:给出一个数组,表示房屋内藏有的现金.房屋围成一圈.相邻房间装有防盗系统,如果相邻的房间在同一晚上被偷,系统会自动报警.要求在不触到警报的情况下,能够偷到的最高金额. 思路:因为房屋围成一圈,并且 ...

  5. LeetCode 309: 一个很清晰的DP解题思路

    问题来源 题目来源链接见下方: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/descript ...

  6. LeetCode 1187. 使数组严格递增(DP)*

    文章目录 1. 题目 2. 解题 1. 题目 给你两个整数数组 arr1 和 arr2,返回使 arr1 严格递增所需要的最小「操作」数(可能为 0). 每一步「操作」中,你可以分别从 arr1 和 ...

  7. LeetCode 956. 最高的广告牌(DP)

    文章目录 1. 题目 2. 解题 1. 题目 你正在安装一个广告牌,并希望它高度最大. 这块广告牌将有两个钢制支架,两边各一个.每个钢支架的高度必须相等. 你有一堆可以焊接在一起的钢筋 rods. 举 ...

  8. LeetCode 1563. 石子游戏 V(DP)

    文章目录 1. 题目 2. 解题 2.1 区间DP 1. 题目 几块石子 排成一行 ,每块石子都有一个关联值,关联值为整数,由数组 stoneValue 给出. 游戏中的每一轮: Alice 会将这行 ...

  9. LeetCode 1140. 石子游戏 II(DP)*

    文章目录 1. 题目 2. 解题 1. 题目 亚历克斯和李继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 亚历克斯和李轮流进行,亚 ...

最新文章

  1. iOS-禁止scrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动...
  2. 【Arduino基础教程】FSR402力敏电阻器
  3. BZOJ1457 棋盘游戏
  4. 【渝粤题库】陕西师范大学202091公共管理学原理 作业(高起本、专升本)
  5. 盘点和程序员相关的那些事,让你不再被割韭菜,薅羊毛!
  6. 漫画:如何实现大整数相乘?(下)
  7. 【java】java 如何抛出 sleep interrupted
  8. Mybatis在Maven项目中使用
  9. 服务器图片加载慢_页面提高性能利器_懒加载
  10. 华数机器人编程语言_招新 | 海大最「酷」的科创团队,确定不来了解一下吗?...
  11. 基于semisync实现MySQL的主从半同步复制
  12. 【图像隐写】基于matlab DCT数字水印嵌入+攻击+提取【含Matlab源码 1758期】
  13. BZOJ2199[Usaco2011 Jan] 奶牛议会
  14. unity 反编译 step1 disUnity
  15. 如何将java项目部署到linux环境(Tomcat)
  16. android 强制关闭键盘,Android关闭输入软键盘无效的问题
  17. 《我要飞,永远都不会累 》---伤感留言
  18. iPhone 11首发评测:你该不该用它换旧iPhone
  19. 笔记本电脑黑屏 笔记本开机黑屏 笔记本黑屏怎么办
  20. Kafka之Controller(Broker的领导者)

热门文章

  1. 按ESC关闭当前窗口
  2. react学习(71)--render使用
  3. [html] 如何使用普通元素拥有像textarea元素一样缩放?
  4. [css] 移动端1px像素的问题及解决方案是什么?
  5. [css] 使用纯css来创建一个滑块
  6. [css] 给一个图片设置透明有哪些方式呢?
  7. 工作157:动态路由
  8. 工作81:图片间隙问题
  9. 前端学习(2208):网络请求模块的选择--axios
  10. 前端学习(1748):前端调试值之console的一些设置