8507 | 2024-01-19 17:05:12 | URAQT420 | Tulipán csokrok | cpp17 | Időlimit túllépés 62/100 | 1.595s | 406876 KiB |
// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
struct Tata{
int w;
long val;
};
int main() {
int n, k; cin>>n>>k;
vector<long> v(n+1);
vector<int> w(n+1);
vector<vector<long> > dp(n+1, vector<long>(k+1));
for(int i = 1; i <= n; ++i){
cin>>v[i];
}
stack<int> s;
for(int i = 1; i <= n; ++i){
if(s.empty())s.push(i);
else{
while(v[i-1] > v[i] && v[s.top()-1] > v[i]){
s.pop();
}
if(v[i-1] < v[i])s.push(i);
}
w[i] = s.top();
}
//for(int x: w)cout<<x<<' ';
dp[0][1] = 1e9 + 1;
for(int i = 1; i <= n; ++i){
dp[i][1] = min(dp[i-1][1], v[i]);
}
dp[0][1] = 0;
for(int j = 2; j <= k; ++j){
stack<Tata> uperr_max;
vector<long> lowerr_max(n+1);
for(int i = 1; i <= n; ++i){
if(uperr_max.empty() || uperr_max.top().w < w[i]){
Tata temp;
temp.w = w[i], temp.val = dp[i-1][j-1];
uperr_max.push(temp);
}else if(uperr_max.top().w == w[i])uperr_max.top().val = max(uperr_max.top().val, dp[i-1][j-1]);
else if(uperr_max.top().w > w[i]){
long temp = dp[i-1][j-1];
while(uperr_max.top().w > w[i]){
temp = max(temp, uperr_max.top().val);
uperr_max.pop();
}
uperr_max.top().val = max(uperr_max.top().val, temp);
}
dp[i][j] = max(dp[w[i]-1][j], uperr_max.top().val + v[i]);
}
}
cout<<dp[n][k]<<endl;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Elfogadva | 3ms | 1812 KiB | ||||
2 | Elfogadva | 3ms | 2064 KiB | ||||
subtask2 | 12/12 | ||||||
3 | Elfogadva | 3ms | 2364 KiB | ||||
4 | Elfogadva | 3ms | 2388 KiB | ||||
5 | Elfogadva | 63ms | 17196 KiB | ||||
subtask3 | 25/25 | ||||||
6 | Elfogadva | 3ms | 2840 KiB | ||||
7 | Elfogadva | 3ms | 2796 KiB | ||||
8 | Elfogadva | 3ms | 3000 KiB | ||||
9 | Elfogadva | 3ms | 3084 KiB | ||||
10 | Elfogadva | 3ms | 3200 KiB | ||||
11 | Elfogadva | 3ms | 3100 KiB | ||||
subtask4 | 25/25 | ||||||
12 | Elfogadva | 3ms | 3252 KiB | ||||
13 | Elfogadva | 3ms | 3652 KiB | ||||
14 | Elfogadva | 3ms | 3620 KiB | ||||
15 | Elfogadva | 3ms | 3940 KiB | ||||
16 | Elfogadva | 3ms | 4308 KiB | ||||
17 | Elfogadva | 3ms | 4672 KiB | ||||
18 | Elfogadva | 4ms | 5108 KiB | ||||
19 | Elfogadva | 4ms | 6216 KiB | ||||
20 | Elfogadva | 6ms | 7788 KiB | ||||
subtask5 | 0/38 | ||||||
21 | Időlimit túllépés | 1.593s | 395548 KiB | ||||
22 | Időlimit túllépés | 1.582s | 396248 KiB | ||||
23 | Időlimit túllépés | 1.575s | 397804 KiB | ||||
24 | Időlimit túllépés | 1.585s | 400744 KiB | ||||
25 | Elfogadva | 1.125s | 406876 KiB | ||||
26 | Elfogadva | 453ms | 172428 KiB | ||||
27 | Elfogadva | 85ms | 31700 KiB | ||||
28 | Elfogadva | 228ms | 79112 KiB | ||||
29 | Elfogadva | 1.042s | 329128 KiB | ||||
30 | Időlimit túllépés | 1.595s | 323308 KiB | ||||
31 | Időlimit túllépés | 1.592s | 397472 KiB | ||||
32 | Időlimit túllépés | 1.593s | 397084 KiB |