Select Half
对于这种题目,要思考的东西就是去寻找其中的规律。
然后再对 n 进行奇偶分类求解即可
// Created by CAD on 2020/4/19.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2e5+5;
ll a[maxn],dp[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
for(int i=1;i<=n;++i)
cin>>a[i];
dp[1]=a[1],dp[2]=a[2];
for(int i=3;i<=n-(n&1);++i){
if(i&1) dp[i]=a[i]+dp[i-2];
else dp[i]=a[i]+max(dp[i-2],dp[i-3]);
}
if(n&1){
ll bj=a[n],ans=max(dp[n-1],dp[n-2]);
for(int i=n-2;i>=3;i-=2){
ans=max(ans,bj+max(dp[i-1],dp[i-2]));
bj+=a[i];
}
cout<<max(ans,bj)<<"\n";
}
else cout<<max(dp[n-1],dp[n]);
return 0;
}
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042