可以发现每10个位置内部有联系,而这之间是独立的。

内部 2^4 搜得最大值/不能通过 外部取最大值更新就好

// Created by YuanGodFollower 
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
const int INF = 1e9 + 10;

vector<int> cards = {1,2,3,4};
bool vis[5];
int a[N];

ll dfs(int bias, int targ, int cur, ll val)
{
    if(cur > targ) return -1;
    if(cur == targ) return val;

    ll ret = -1;
    for(auto&& ca : cards)
    {
        if(!vis[ca])
        {
            if(val + a[bias + cur + ca] < 0) continue;
            vis[ca] = 1;
            ret = max(ret, dfs(bias, targ, cur + ca, val + a[bias + cur + ca]));
            vis[ca] = 0;
        }
    }
    return ret;
}

int main()
{
    cin.tie(0)->sync_with_stdio(false);
    int n;cin>>n;
    for(int i = 1;i <= n;i++) cin>>a[i];
    ll ans = 0;
    for(int i = 0;i < n;i+=10)
    {
        int targ = min(10,n - i);
        ans = dfs(i, targ, 0, ans);
        if(ans == -1)
        {
            cout<<-1;
            return 0;
        }
    }
    cout<<ans;
}