Submission #37778

#TimeUsernameProblemLanguageResultExecution timeMemory
37778MatheusLealVSplit the sequence (APIO14_sequence)C++14
22 / 100
96 ms5868 KiB
#include <bits/stdc++.h> #define int long long #define N 54 #define f first #define s second #define inf 2000000000 using namespace std; typedef pair<int, int> pii; int n, k, v[N], dp[N][N][N], sum[N]; pii prox[N][N][N]; int solve(int ini, int fim, int k) { if(k >= fim - ini + 1) return 0; if(ini == fim || k <= 0) return 0; if(dp[ini][fim][k] != -1) return dp[ini][fim][k]; for(int mid = ini; mid < fim; mid ++) { for(int a = 0; a < k; a++) { int custo = (sum[mid] - sum[ini - 1])*( sum[fim] - sum[mid] ); int filhos = solve(ini, mid, a) + solve(mid + 1, fim, k - 1 - a); if( filhos + custo > dp[ini][fim][k] ) { dp[ini][fim][k] = filhos + custo; prox[ini][fim][k] = pii(mid, a); } //if(mid ==2) cout<<custo<<"\n"; } } //cout<<ini<<" "<<fim<<" "<<k<<" "<<dp[ini][fim][k]<<"\n"; return dp[ini][fim][k]; } void print(int ini, int fim, int k) { if(!prox[ini][fim][k].f) return; cout<<prox[ini][fim][k].f<<" "; print(ini, prox[ini][fim][k].f, prox[ini][fim][k].s); print(prox[ini][fim][k].f + 1, fim, k - 1 - prox[ini][fim][k].s); } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k; for(int i = 1; i <= n; i++) cin>>v[i], sum[i] = sum[i - 1] + v[i]; memset(dp, -1, sizeof dp); cout<<solve(1, n, k)<<"\n"; print(1, n, k); cout<<"\n"; }
#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...