Submission #73548

#TimeUsernameProblemLanguageResultExecution timeMemory
73548VardanyanSplit the sequence (APIO14_sequence)C++14
33 / 100
2056 ms3004 KiB
#include <bits/stdc++.h> using namespace std; const int N = 100000+7; long long a[N]; long long pref[N]; //int suf[N]; pair<long long,int> check(int l,int r){ long long ans = 0; int pos = l; for(int i = l;i<=r-1;i++){ long long x = pref[i]-pref[l-1]; long long y = pref[r]-pref[i]; x*=y; if(x>ans){ ans = x; pos = i; } } return make_pair(ans,pos); } pair<long long,int> dp[N][208]; int par[N][208]; int main() { int n,k; cin>>n>>k; for(int i = 1;i<=n;i++) cin>>a[i]; for(int i = 1;i<=n;i++) pref[i] = pref[i-1]+a[i]; // for(int i = n;i>=1;i--) suf[i] = suf[i+1]+a[i]; /*for(int i = 1;i<=n;i++){ dp[1][i] = check(1,i); }*/ for(int kk = 1;kk<=k;kk++){ for(int i = 1;i<=n;i++){ for(int j = 1;j<i;j++){ if(dp[kk-1][j].first+(pref[i]-pref[j])*pref[j]>=dp[kk][i].first){ dp[kk][i].first = dp[kk-1][j].first+(pref[i]-pref[j])*pref[j]; dp[kk][i].second = j; } } } } cout<<dp[k][n].first<<endl; int kk = k; int nn = n; int ul = 0; while(kk>0){ cout<<dp[kk][nn].second<<" "; nn = dp[kk][nn].second; kk--; ul++; } cout<<endl; // cout<<ul<<endl; return 0; }
#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...