题目描述:抢劫一排住户,但是不能抢邻近的住户,求最大抢劫量。
定义 dp 数组用来存储最大的抢劫量,其中 dp[i] 表示抢到第 i 个住户时的最大抢劫量。由于不能抢劫邻近住户,因此如果抢劫了第 i 个住户那么只能抢劫 i - 2 或者 i - 3 的住户,所以
#include <bits/stdc++.h>
using namespace std;
int rob(vector<int>& nums)
{
int n = nums.size();
if(n == 0) return 0;
if(n == 1) return nums[0];
int pre2 = 0,pre3 = 0,pre1 = 0;
for(int i = 0;i<n;i++)
{
int cur = max(pre2,pre3) + nums[i];
pre3 = pre2;
pre2 = pre1;
pre1 = cur;
}
return max(pre1,pre2);
}
int main()
{
vector<int> a;
int i = 0;
do{
cin>>i;
a.push_back(i);
}while(getchar() !='\n');
int ans = rob(a);
cout<<ans<<endl;
}