제출 #489395

#제출 시각아이디문제언어결과실행 시간메모리
489395SlavicG수열 (APIO14_sequence)C++17
50 / 100
132 ms8584 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define forn(i,n) for(int i=0;i<n;i++) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(),v.rend() #define pb push_back #define sz(a) (int)a.size() const int N = 1e3 + 10, K = 205; ll dp[N][K], par[N][K]; ll p[N]; ll calc(int l, int r){ ll ret = p[r]; if(l)ret -= p[l - 1]; return ret; } void solve() { forn(i, N)forn(j, K)dp[i][j] = -1e15, par[i][j] = -1; int n, k; cin >> n >> k; vector<ll> a(n); for(int i = 0;i < n; ++i){ cin >> a[i]; p[i] = a[i]; if(i)p[i] += p[i - 1]; } if(n == 1){ cout << 0; return; } forn(i, n)dp[i][0] = 0; for(int i = 1; i < n; ++i){ for(int j = 1; j <= k; ++j){ dp[i][j] = 0; for(int l = 0;l < i; ++l){ if(dp[i][j] <= dp[l][j - 1] + calc(l, i - 1) * calc(i, n - 1)){ par[i][j] = l; } dp[i][j] = max(dp[i][j], dp[l][j - 1] + calc(l, i - 1) * calc(i, n - 1)); } } } ll mx = 0, idx = 0; for(int i = 0;i < n; ++i){ if(dp[i][k] >= mx){ mx = dp[i][k]; idx = i; } } cout << mx << "\n"; int x = idx; for(int i = 0;i < k; ++i){ cout << x << " "; x = par[x][k - i]; } } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; //cin >> t; while(t--) { 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...