제출 #366922

#제출 시각아이디문제언어결과실행 시간메모리
366922rocks03수열 (APIO14_sequence)C++14
50 / 100
2090 ms69284 KiB
//#pragma GCC target("avx2") //#pragma GCC optimization("O3") //#pragma GCC optimization("unroll-loops") #include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define ff first #define ss second #define pb push_back #define SZ(x) ((int)(x).size()) #define all(x) x.begin(), x.end() #define rep(i, a, b) for(int i = (a); i < (b); i++) #define per(i, a, b) for(int i = (a); i >= (b); i--) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int MAXK = 200+10; const int MAXN = 2e5+100; int N, K, a[MAXN], opt[MAXN][MAXK]; ll pr[MAXN], dp[MAXN][MAXK]; void solve(){ cin >> N >> K; rep(i, 1, N + 1){ cin >> a[i]; pr[i] = pr[i - 1] + a[i]; } rep(k, 1, K + 1){ rep(i, 1, N + 1){ rep(j, 0, i){ ll newdp = dp[j][k - 1] + (pr[i] - pr[j]) * (pr[N] - pr[i]); if(newdp >= dp[i][k]){ dp[i][k] = newdp; opt[i][k] = j; } } } } ll ans = 0; int ind = 0; rep(i, 1, N){ if(dp[i][K] >= ans){ ans = dp[i][K], ind = i; } } cout << ans << "\n"; per(k, K, 1){ cout << ind << " "; ind = opt[ind][k]; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); solve(); 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...