题目描述链接:https://leetcode-cn.com/problems/house-robber/
解题思路:动态规划。(1)状态确定:dp[i]表示从一开始劫到i户人家的现金,另外要包括此户人家。
(2)边界确定:dp[0]=nums[0],dp[1]=max(nums[0],nums[1])。
(3)状态转移方程:dp[i]=max(dp[j])+nums[i] 其中 0=< j <i-1
LeetCode C++解题参考代码:
class Solution { public: int rob(vector<int>& nums) { int len=nums.size(); if(len==0){ return 0; } if(len==1){ return nums[0]; } if(len==2){ return max(nums[0],nums[1]); } int dp[len]; dp[0]=nums[0]; dp[1]=nums[1]; int maxium=dp[0];//,dp[1]); for(int i=2;i<len;++i){ dp[i]=maxium+nums[i]; maxium=max(maxium,dp[i-1]); } maxium=max(maxium,dp[len-1]); return maxium; } };