LeetCode198——house robber(不懂dp)

  这题,是不能连续抢两间相邻的店铺。我不知道是不是一个环,姑且算作不是一个环。

  如果你已经来到了第n间店铺,那么你有两个选择。

  1.抢:sum[n] = sum[n - 2] +n.value  。第n - 1不能抢

  2.不抢:你的总收益来到前面一家店的收益总和sum[n] =sum[n - 1]。

  所以!我们只需要比较这两者的大小,就可以得出我们的最佳选择是什么了。

  为了方便理解,假设a,b,c三间店铺。你来到了c店铺,c店铺不抢的话,你应该在a,b店铺中找一个最大的来抢。c抢的话,那么就是a + c两者之和。需要比较a,b中大的和a + c的和谁大。

  同理,如果将通常情况分为n-2,n-1,n三个店铺。那么你来到n你抢n则是n-2 + n,不抢的话则应该在n-2和n-1两种解决方式之中找寻最大的方式来抢。

class Solution {
public:
    int rob(vector<int>& nums)
    {

       if(nums.size() == 0)
       {
           return 0;
       }
       else if(nums.size() == 1)
       {
           return nums[0];
       }
       else if(nums.size() == 2)
       {
           return max(nums[0],nums[1]);
       }
       int n1 = nums[0];
       int n2 = max(nums[0],nums[1]);
       for(int i = 2;i != nums.size();++ i)
       {
           int n = n1 + nums[i];//第一次是第三间铺子
           int n3 = n > n2 ? n : n2;//第三间铺子抢不抢?抢就是n,不抢就是n2;
           n1 = n2;
           n2 = n3;
       }
       return max(n1,n2);
    }
};
时间: 2024-11-03 22:22:59

LeetCode198——house robber(不懂dp)的相关文章

LeetCode198 House Robber

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will autom

198.House Robber(dp)

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will autom

LeetCode198——House Robber

这题告诉我们,要成为一个优秀的小偷,得懂编程才行.哈哈 You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system

Android程序猿如何泡设计妹之快速掌握dp和px才可以

相信很多Android程序猿已经对身边的设计妹垂涎三尺了,那么如何博得设计妹的好感呢,学好这篇文章就可以了. 程序猿与UI设计妹讨论设计稿和切图的时候,经常会因为dp和px的问题搞的不愉快,这里可以分析出两个原因: 1,程序猿原因,不懂dp和px的换算关系.包括我,以及我见到的大多数开发,更多的时候其实不是很关心dp和px是如何来的,以及如何转换的,只知道掌握一般情况用dp,字体大小用sp,画线用px. 2,设计妹原因,设计不出dp标注,或者甚至就不懂dp是什么东东.大多数公司并不会为Andro

SPOJ-SERVICE 线性dp+维度压缩

还是线性dp,有点感觉了,另外这个问题也可以用滚动数组 /* 依然是先按照阶段i划分, dp[i][j][k]表示完成第i个请求时,两个员工分别在j位置和k位置的费用(还有一个员工一定在位置p) dp[i][j][k]=min(dp[i][j][k],dp[i-1][j][k]+cost[pre][p]);处理完上一个请求的员工处理下一个请求,其余两个不懂 dp[i][j][pre]=min(dp[i][j][pre],dp[i-1][j][k]+cost[k][p]);处理完上一个请求的员工不

BNUOJ 1055 走迷宫2

走迷宫2 Time Limit: 1000ms Memory Limit: 65535KB 64-bit integer IO format: %lld      Java class name: Main 走迷宫是很有趣的一种游戏,能够锻炼人的记忆力和思维.现在,HK被困在一个迷宫里面了,请你帮助他计算一下有多少种不同的走法,能够让他走出迷宫.这个迷宫很奇怪,HK只能够沿着向上或者向右的方向走,不能回头. 迷宫使用一个N*M的矩阵来描述,矩阵中用'.'代表空格可以通行,用'*'代表障碍物,用'

[周末训练]数字计数

题目 [内存限制:$512MiB$] [时间限制:$1000ms$] [标准输入输出] [题目类型:传统] [评测方式:文本比较] [题目描述] 原题来自:ZJOI 2010 给定两个正整数$a$和$b$,求在$[a,b]$中的所有整数中,每个数码$(digit)$各出现了多少次. [输入格式] 仅包含一行两个整数 ,含义如上所述. [输出格式] 包含一行$10$个整数,分别表示$0~9$在$[a,b]$中出现了多少次. [样例] 样例输入 1 99 样例输出 9 20 20 20 20 20

(DP)House Robber

题目: You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will a

LeetCode—House Robber 寻找数组不相邻组合最大值DP

https://leetcode.com/problems/house-robber/ 题目设计了一个抢劫犯的情景,其实就是求数组中不相邻数据进行组合得到的最大值 举一个例子 假设数据: 8 3 6 15 4 9 7 10 那么首先可能选取 8 , 3 每一个数字的选取都是根据他的前两个数字,前三个数字得到的最大值进行选择,等到6的时候考虑前面只能和8组合  8,3,14 到数字15,那么就可以考虑在8,3中进行组合  8,3,14,23,4,9,7,10 接下来的步骤: 8,3,14,23,1