Submission #489384

#TimeUsernameProblemLanguageResultExecution timeMemory
489384SlavicGSplit the sequence (APIO14_sequence)C++17
0 / 100
12 ms11144 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define forn(i,n) for(int i=0;i<n;i++) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(),v.rend() #define pb push_back #define sz(a) (int)a.size() const int N = 1e3 + 10, K = 205; ll dp[N][K]; pair<ll, ll> par[N][K]; ll p[N]; ll calc(int l, int r){ ll ret = p[r]; if(l)ret -= p[l - 1]; return ret; } void solve() { forn(i, N)forn(j, K)dp[i][j] = -1e7, par[i][j] = {-1, -1}; int n, k; cin >> n >> k; vector<int> a(n); for(int i = 0;i < n; ++i){ cin >> a[i]; p[i] = a[i]; if(i)p[i] += p[i - 1]; } forn(i, n)dp[i][0] = 0; for(int i = 1; i < n; ++i){ for(int j = 0; j <= k; ++j){ if(j > 0){ for(int l = 0;l < i; ++l){ if(i + 1 < n){ if(dp[i][j] < dp[l][j - 1] + calc(l, i - 1) * calc(i, n - 1)){ par[i][j] = {l, j - 1}; } dp[i][j] = max(dp[i][j], dp[l][j - 1] + calc(l, i - 1) * calc(i, n - 1)); } } } } } ll mx = 0, idx = 0; for(int i = 0;i < n; ++i){ if(dp[i][k] > mx){ mx = dp[i][k]; idx = i; } } cout << mx << "\n"; int x = idx, y = k; vector<int> v; while(y != 0){ cout << x + 1 << " "; int A = par[x][y].first, B = par[x][y].second; x = A, y = B; } cout << "\n"; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; //cin >> t; while(t--) { solve(); } }
#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...