解题思路:

  • 取最大不相邻数之和的变种,原问题可以看作前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;
}