House Robber问题及解法
2017-03-27 14:17
155 查看
问题描述:
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 automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
问题分析:
作为一个强盗,去盗取一条街上住户家里的钱,但不能同时盗取相邻的两家的钱。
我么可以这么定义状态:dp[i]----走到第i个住户时,能盗取的钱的最大数目。
所以dp[i] = max(dp[i - 1], dp[i - 2] + nums[i - 1]),最终求得的dp
即为答案。
过程详见代码:
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
int n = nums.size();
vector<int> dp(n + 1, 0);
dp[1] = nums[0];
for(int i = 2; i <= n;i++)
{
dp[i] = max(dp[i - 1],dp[i - 2] + nums[i - 1]);
}
return 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 automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
问题分析:
作为一个强盗,去盗取一条街上住户家里的钱,但不能同时盗取相邻的两家的钱。
我么可以这么定义状态:dp[i]----走到第i个住户时,能盗取的钱的最大数目。
所以dp[i] = max(dp[i - 1], dp[i - 2] + nums[i - 1]),最终求得的dp
即为答案。
过程详见代码:
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
int n = nums.size();
vector<int> dp(n + 1, 0);
dp[1] = nums[0];
for(int i = 2; i <= n;i++)
{
dp[i] = max(dp[i - 1],dp[i - 2] + nums[i - 1]);
}
return dp
;
}
};
相关文章推荐
- Convert BST to Greater Tree问题及解法
- Largest Palindrome Product问题及解法
- 编程之美3.7队列中取最大值操作问题(新解法,空间复杂度比原解法低)
- 第十二周项目五迷宫问题之图深度优先遍历解法
- Josephu问题的数学解法
- 约瑟夫问题的解法集锦
- 装配线(工作站)问题的两种解法
- Reverse Integer问题及解法
- 凸包问题的五种解法
- LeetCode Single Number I & II 都符合两个问题额外要求的 通用解法 与 思考过程
- Valid Palindrome II问题及解法
- 《我的twitter技术面试失败》中墙之间水坑装水问题的更烂解法(Java解)
- 我的解法:五间房子中谁养鱼的问题
- Super Pow问题及解法
- 约瑟夫环问题数学解法
- 八数码问题相关题目解法 poj1077Eight hdu5012Dice
- 钢铁切割问题 动态规划(输出切割方案和带成本的解法)
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
- Flatten Nested List Iterator问题及解法
- TOP-K问题的几种解法