Submission #1110104

#TimeUsernameProblemLanguageResultExecution timeMemory
1110104sunboiSplit the sequence (APIO14_sequence)C++17
50 / 100
2041 ms16488 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; signed main(){ int n, k; cin >> n >> k; vector<int> a(n + 1), suf(n + 2); for (int i = 1; i <= n; i++){ cin >> a[i]; } for (int i = n; i >= 0; i--){ suf[i] = suf[i + 1] + a[i]; } vector<vector<int>> dp(n + 10, vector<int> (k + 1, 0)); for (int i = n; i >= 1; i--){ for (int j = i + 1; j <= n; j++){ int suma = suf[i] - suf[j]; int before = suf[j]; for (int kk = 1; kk <= k; kk++){ dp[i][kk] = max(dp[i][kk], dp[j][kk - 1] + suma * before); } } } set<int> id; int last = 1; int kk = k; for (int i = 2; i <= n; i++){ //cout << last << ' ' << kk << endl; int suma = suf[last] - suf[i]; int before = suf[i]; if (dp[last][kk] == dp[i][kk - 1] + suma * before){ id.insert(i - 1); last = i; kk--; } } cout << dp[1][k] << endl; for (int x : id) cout << x << ' '; cout << endl; }
#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...