198. House Robber的C++解法(dp)
阿新 • • 發佈:2019-01-02
題目描述: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]; } };