제출 #668961

#제출 시각아이디문제언어결과실행 시간메모리
668961Dan4LifeSplit the sequence (APIO14_sequence)C++17
50 / 100
2063 ms31944 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define all(a) a.begin(),a.end() #define mp make_pair #define fi first #define se second const int maxn = (int)1e4+10; int n, K, a[maxn], pre[maxn]; int dp[maxn][201], p[maxn][201]; vector<int> v; inline int sum(int i, int j) {return pre[j+1]-pre[i];} int recur(int l, int k){ if(!k) return 0; if(dp[l][k]!=-1) return dp[l][k]; int ans = 0; for(int x = l; x < n-1; x++){ if(n-1-(x+1)+1 <=k-1) break; int tot = recur(x+1,k-1)+sum(l,x)*sum(x+1,n-1); if(ans < tot) ans=tot, p[l][k]=x; } return dp[l][k]=ans; } void recur2(int l, int k){ if(k) v.pb(p[l][k]), recur2(p[l][k]+1,k-1); } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> K; memset(dp,-1,sizeof(dp)); for(int i = 0; i < n; i++) cin >> a[i], pre[i+1]=pre[i]+a[i]; cout << recur(0,K) << "\n"; recur2(0,K); sort(all(v)); for(auto u : v) cout << u+1 << " "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...