Submission #37805

#TimeUsernameProblemLanguageResultExecution timeMemory
37805MatheusLealV수열 (APIO14_sequence)C++14
39 / 100
2000 ms36724 KiB
#include <bits/stdc++.h> #define int long long #define N 10005 #define K 220 #define f first #define s second #define inf 2000000000 using namespace std; typedef pair<int, int> pii; int n, k, v[N], dp[N][K], sum[N], prox[N][K]; int solve(int ini, int k) { if(k >= n - ini + 1) return 0; if(ini == n || k <= 0) return 0; if(dp[ini][k] != -1) return dp[ini][k]; for(int mid = ini; mid < n; mid ++) { int custo = (sum[mid] - sum[ini - 1])*( sum[n] - sum[mid] ); int filhos = solve(mid + 1, k - 1); if( filhos + custo > dp[ini][k] ) { dp[ini][k] = filhos + custo; prox[ini][k] = mid; } } return dp[ini][k]; } void print(int ini, int k) { if(!prox[ini][k]) return; cout<<prox[ini][k]<<" "; print(prox[ini][k] + 1, k - 1); } 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]; for(int q = 0; q <= k ; q++) { for(int i = n; i >= 1; i--) { if(i == n || q >= n - i + 1 || q <= 0) dp[i][q] = 0; else { for(int j = i; j < n; j++) { int custo = (sum[j] - sum[i - 1])*( sum[n] - sum[j] ); int filhos = dp[j + 1][q - 1]; if( filhos + custo > dp[i][q] ) { dp[i][q] = filhos + custo; prox[i][q] = j; } } } } } cout<<dp[1][k]<<"\n"; print(1, 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...