제출 #1001367

#제출 시각아이디문제언어결과실행 시간메모리
1001367aaaaaarroz수열 (APIO14_sequence)C++17
0 / 100
2023 ms15960 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll n, K; cin >> n >> K; vector<ll> arr(n); for (ll &a : arr) cin >> a; vector<ll> prefix(n + 1, 0); for (ll i = 0; i < n; i++) { prefix[i + 1] = prefix[i] + arr[i]; } vector<vector<ll>> dp(n + 1, vector<ll>(K + 1, LLONG_MIN)); vector<vector<ll>> prev(n + 1, vector<ll>(K + 1, -1)); dp[0][0] = 0; for (ll k = 1; k <= K; k++) { for (ll i = k; i <= n; i++) { for (ll p = 0; p < i; p++) { ll current_sum = prefix[i] - prefix[p]; if (dp[p][k - 1] != LLONG_MIN && dp[p][k - 1] + current_sum * (prefix[n] - current_sum) > dp[i][k]) { dp[i][k] = dp[p][k - 1] + current_sum * (prefix[n] - current_sum); prev[i][k] = p+1; } } } } cout << dp[n][K] << endl; vector<ll> splits; ll pos = n; ll current_k = K; while (current_k > 0) { pos = prev[pos][current_k]; splits.push_back(pos); current_k--; } reverse(splits.begin(), splits.end()); for (ll split : splits) { cout << split << " "; } cout << 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...