Select Half

F - 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;
}
posted @ 2020-04-19 13:17  caoanda  阅读(128)  评论(0编辑  收藏  举报