Submission #1076339

#TimeUsernameProblemLanguageResultExecution timeMemory
1076339speedcodeSplit the sequence (APIO14_sequence)C++17
50 / 100
2033 ms131072 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll MOD = 1000000007; ll dp1[100001][201]; int dp2[100001][201]; int n; ll Dat[100001]; ll f(int m, int k){ if(k+1 > n + 1 - m) return 0; if(k == 0) return 0; if(dp1[m][k] != -1) return dp1[m][k]; ll res = -1; for(int i = m+1; i <= n; i++){ ll r = (Dat[i-1] - Dat[m-1])*(Dat[n] - Dat[i-1]) + f(i, k-1); if(r >= res){ res = r; dp2[m][k] = i; } } dp1[m][k] = res; return res; } void solve(){ int k; cin >> n >> k; for(int i = 1; i <= n; i++){ for(int j = 0; j <= k; j++){ dp1[i][j] = -1; dp2[i][j] = -1; } } Dat[0] = 0; for(int i = 1; i <= n; i++){ cin >> Dat[i]; Dat[i] += Dat[i-1]; } cout << f(1, k) << '\n'; int key = 1; while(true){ key = dp2[key][k]; if(key == -1) break; cout << key-1 << ' '; k--; } cout << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); 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...