198. House Robber的C++解法(dp)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/musechipin/article/details/85561057

题目描述:https://leetcode.com/problems/house-robber/

                   https://www.lintcode.com/problem/house-robber/description

第i间房屋能打劫得到的最大金额有两种可能,1.不打劫,金额和i-1间房屋相同;2.打劫这一间,最大金额是这一间的钱和打劫到第i-2间能得到的最多的钱相加;动态方程是:dp[i]=max(dp[i-1],A[i]+dp[i-2])

lintcode上题目要求空间复杂度为常数且答案是long型,只需要用两个参数记录前一间、前两间最多能打劫到的钱数即可。
如果不是long型限制,可以直接在原数组上计算。

class Solution {
public:
    int rob(vector<int>& nums) {
      if (nums.size()==0) return 0;
      if (nums.size()==1) return nums[0];
      nums[1]=max(nums[1],nums[0]);
      for (int i=2;i<nums.size();i++)
            nums[i]=max(nums[i-1],nums[i]+nums[i-2]);
        return nums[nums.size()-1];
    }
};

猜你喜欢

转载自blog.csdn.net/musechipin/article/details/85561057
今日推荐