解题思路:
- 取最大不相邻数之和的变种,原问题可以看作前n-1个数的最大不相邻数之和,和后n-1个数的最大不相邻之和,取两者的最大值即可。
#include<bits/stdc++.h>
using namespace std;
long long solve(vector<int> v, int n){
long long dp , res ;
if (n == 1) return v[n-1];
else{
dp = max(v[0],v[1]);
res = v[0];
}
for(int i = 2; i < n; ++i){
int tmp = dp;
dp = max(res+v[i], dp);
res = tmp;
}
return dp;
}
int main (){
int n;
cin>>n;
vector<int> v(n), v2(n);
for(int i = 0; i < n; ++i){
cin>>v[i];
v2[i] = v[i];
}
v.pop_back();
v2.erase(v2.begin());
long long mx = max(solve(v, n-1),solve(v2,n-1));
cout<<mx<<endl;
return 0;
}