【力扣198】打家劫舍
如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
源代码:
class Solution {
public:int rob(vector<int>& nums) {vector<int> dp (nums.size() + 1, 0);if(nums.size()==0){return 0;}if(nums.size()==1){return nums[0];}dp[1] = nums[0];dp[2] = max(nums[0], nums[1]);for(int i=3; i<=nums.size(); i++){dp[i] = max(dp[i-1], dp[i-2]+nums[i-1]);}return dp[nums.size()];}
};
设dp(i) 表示偷窃前i个房屋得到的最高金额。
dp[i-1]如果偷了第i-1家,则dp[i]不能偷第i家;
不偷第i家,第i-1家偷不偷都无所谓,即dp[i-1];
偷第i家,第i-1家不能偷,第i-2家偷不偷都无所谓,即dp[i-2]+nums[i];
动态规划方程:
dp(i) = max(dp[i-1], dp[i-2] + nums[i]);
修改后:
完美代码: