这是一道动态规划的简单题目,只要找出dp方程即可,如下:
dp[n] = max( dp[n-1] , dp[n-2]+array[n] )
dp[0] = array[0] , dp[1] = max( array[0] , array[1] )
代码如下:
class Solution {
public:
int rob(std::vector<int>& nums)
{
if (nums.size() < 1)
return 0;
if (nums.size() == 1)
return nums.at(0);
if (nums.size() == 2)
return nums.at(0) > nums.at(1) ? nums.at(0) : nums.at(1);
std::vector<int> dp;
dp.push_back(nums.at(0));
dp.push_back(nums.at(0) > nums.at(1) ? nums.at(0) : nums.at(1));
for (int i = 2; i < nums.size(); ++i)
{
dp.push_back(dp.at(i - 2) + nums.at(i) > dp.at(i - 1) ? dp.at(i - 2) + nums.at(i) : dp.at(i - 1));
}
return dp.at(nums.size() - 1);
}
};