Submission #1271292

#TimeUsernameProblemLanguageResultExecution timeMemory
1271292bbldrizzy수열 (APIO14_sequence)C++20
22 / 100
2 ms1096 KiB
#include <bits/stdc++.h> #include <ios> #include <iostream> using namespace std; using ll = long long; using P = pair<int, int>; #define f first #define s second const int MOD = 1e9+7; const ll MX = 4*1e18; vector<ll> pref; vector<vector<ll>> dp; vector<vector<ll>> st1; vector<vector<ll>> st2; void solve(ll id, ll i, ll j, ll l, ll r) { if (i > j) return; ll mid = (i+j)/2; ll mx = 0; ll best = l; for (ll k = l; k <= min(mid, r); k++) { ll v = dp[k][id-1] + pref[k+1]*(pref[mid+1]-pref[k+1]); // ll v = dp[k-1][id-1] + cost[k][mid]; if (v > mx) { best = k; mx = v; } } dp[mid][id] = mx; st2[mid] = st1[best]; if (st2[mid].empty() || st2[mid].back() != best) st2[mid].push_back(best); // cout << "mid, best, mn: " << mid << ", " << best << ", " << mn << "\n"; // cout << "dp[best][id-1]: " << dp[best][id-1] << "\n"; solve(id, i, mid-1, l, best); solve(id, mid+1, j, best, r); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); ll n, k; cin >> n >> k; vector<ll> v(n); for (auto &x: v) cin >> x; dp.assign(n+1, vector<ll>(k+2)); st1.assign(n+1, vector<ll>()); st2.assign(n+1, vector<ll>()); pref.assign(n+1, 0); for (int i = 0; i < n; i++) { pref[i+1] = pref[i] + v[i]; } for (int i = 1; i <= k; i++) { solve(i, 0, n-1, 0, n-1); swap(st1, st2); } cout << dp[n-1][k] << "\n"; for (auto it: st1[n-1]) { cout << it+1 << " "; } }
#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...