Submission #879908

#TimeUsernameProblemLanguageResultExecution timeMemory
879908iskhakkutbilimSplit the sequence (APIO14_sequence)C++17
0 / 100
2065 ms16732 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ff first #define ss second #define all(a) a.begin(), a.end() const int mod = 1e17; const int N = 1e5; /* 7 3 4 1 3 4 0 2 3 */ signed main(){ //ios::sync_with_stdio(0); //cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; vector< vector<int> > dp(n + 1, vector<int>(k + 1, -mod)); vector< vector<int> > where(n + 1, vector<int>(k + 1, -1)); vector<int> a(n + 1, 0); for(int i = 1;i <= n; i++) cin >> a[i]; vector<int> suff(n + 2, 0), pref(n + 1, 0); suff[n] = a[n]; for(int i = 1;i <= n; i++) pref[i] = pref[i-1] + a[i]; for(int i = n-1;i >= 1; i--) suff[i] = suff[i + 1] + a[i]; dp[0][0] = 0; for(int i = 1;i <= n; i++){ for(int sub = 0; sub <= k; sub++){ if(dp[i][sub] < dp[i-1][sub]){ dp[i][sub] = dp[i-1][sub]; where[i][sub] = where[i-1][sub]; } if(sub == 0) continue; for(int j = i; j >= 1; j--){ int pr = pref[i] - pref[j-1]; if(dp[i][sub] < dp[j-1][sub-1] + (suff[i+1] * pr)){ dp[i][sub] = dp[j-1][sub-1] + (suff[i + 1] * pr); where[i][sub] = j; } } } } vector<int> path; cout << dp[n][k] << '\n'; int idx = n; for(int j = k; j > 0; j--){ cout << where[idx][j] << ' '; idx = where[idx][j]; } 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...