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