Submission #73545

#TimeUsernameProblemLanguageResultExecution timeMemory
73545VardanyanSplit the sequence (APIO14_sequence)C++14
33 / 100
2051 ms2544 KiB
#pragma GCC optimize "-O3" #include <bits/stdc++.h> using namespace std; const int N = 100000+7; int 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++) scanf("%d",&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 = 2;kk<=k;kk++){ for(int i = kk+1;i<=n;i++){ for(int j = kk-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; } /* 7 3 4 1 3 4 0 2 3 */

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:27:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(int i = 1;i<=n;i++) scanf("%d",&a[i]);
                             ~~~~~^~~~~~~~~~~~
#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...