제출 #564971

#제출 시각아이디문제언어결과실행 시간메모리
564971ac2hu수열 (APIO14_sequence)C++14
22 / 100
338 ms131072 KiB
#include<bits/stdc++.h> using namespace std; #define int long long struct Z{ vector<int> vals; int n; Z(vector<int> &a){ n = a.size(); vals.resize(n , 0); vals[0] = a[0]; for(int i = 1;i<n;i++){ vals[i] = vals[i - 1] + a[i]; } } int operator()(int l,int r){ if(l > r)return 0; assert(n > r); assert(l <= r); assert(l >= 0); int temp = vals[r]; if(l != 0)temp -= vals[l - 1]; return temp; } }; signed main(){ iostream::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); int n, K;cin >> n >> K; vector<vector<vector<int>>> dp(n, vector<vector<int>>(n, vector<int>(K + 2))); vector<vector<vector<int>>> spp(n, vector<vector<int>>(n, vector<int>(K + 2))); vector<vector<vector<int>>> spk(n, vector<vector<int>>(n, vector<int>(K + 2))); vector<int> a(n); for(auto &e : a)cin >> e; Z pref(a); auto solve = [&](auto &self, int l,int r,int k)->int{ if(l > r)return 0; if(k == 0)return 0; if(dp[l][r][k] != 0)return dp[l][r][k]; assert(k > 0); int ans = 0; for(int i = l;i<r;i++){ // (l, i), (l + 1, r) for(int sk = 0;sk<k;sk++){ int val1, val2; int val = pref(l, i)*pref(i + 1, r) + (val1 = self(self, l, i, sk)) + (val2 = self(self, i + 1, r, k - sk - 1)); if(val > ans){ spp[l][r][k] = i; spk[l][r][k] = sk; ans = val; } } } return (dp[l][r][k] = ans); }; vector<int> A; auto get = [&](auto &self,int l,int r,int k)->void{ if(l > r)return; if(k == 0)return; A.push_back(spp[l][r][k]); int i = spp[l][r][k], sk = spk[l][r][k]; self(self, l, i, sk); self(self, i + 1, r, k - sk - 1); }; cout << solve(solve, 0, n - 1, K) << "\n"; get(get, 0, n - 1, K); for(auto e : A)cout << e + 1 << " "; cout << "\n"; }
#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...