思路:明显的动态规划,用money[i]存放打劫至第i家时得到的最多的金额,那么money[i]=max(money[i-2]+nums[i] ,money[i-1]) 因为不能打劫邻居
或者说money[i]代表打劫至第i家时的最佳方案(即最高金额);
class Solution {
public:
int rob(vector<int> &nums)
{
int len = nums.size();
if (len == 0)
{
return 0;
}
if (len == 1)
{
return nums[0];
/* code */
}
if (len == 2)
{
return nums[0] > nums[1] ? nums[0] : nums[1];
}
vector<int> money(len, 0);
//前两个初始化
money[0] = nums[0];
money[1] = nums[0] > nums[1] ? nums[0] : nums[1];
for (int i = 2; i < len; i++)
{
if (money[i - 2] + nums[i] > money[i-1]) //动态规划最优解方程
{
money[i] = money[i - 2] + nums[i];
}
else
{
money[i]=money[i-1];
}
}
return money[len - 1];
}
};