这道题是动态规划算法的入门题:
解法借鉴:
1、当nums.size()==0时,返回0
2、当nums.size()==1,return nums[0]
3、当nums.size()==2,return max(nums[0],nums[1])
4、当nums.size()>=3时,这是就要分为两种情况:其一; 抢劫第三个,则就要加上第一个;
其二:不抢劫第三个,那么保持前两个最大
5、以此类推,f(k)=max(f(k-1),f(k-2)+nums[i])
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.size()==0){
return 0;
}
if(nums.size()==1){
return nums[0];
}
if(nums.size()==2){
return max(nums[0],nums[1]);
}
vector<int>temp(nums.size(),0);
temp[0]=nums[0];
temp[1]=max(nums[0],nums[1]);
for(int i=2;i<nums.size();i++){
temp[i]=max(temp[i-1],temp[i-2]+nums[i]);
}
return temp[nums.size()-1];
}
};