可以发现每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;
}

京公网安备 11010502036488号