Submission #53364

#TimeUsernameProblemLanguageResultExecution timeMemory
53364MatheusLealVK blocks (IZhO14_blocks)C++17
53 / 100
1093 ms95728 KiB
#include <bits/stdc++.h> #define N 100010 #define K 110 #define inf 200000000000000000LL using namespace std; typedef long long ll; ll n, k, v[N], pref[N], dp[N][K], best[N][K]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k; for(int i = 1; i <= n; i++) cin>>v[i]; for(int i = 0; i < N; i++) for(int j = 0; j < K; j++) dp[i][j] = inf; dp[0][1] = 0; for(int i = 1; i <= n; i++) { dp[i][1] = max(dp[i - 1][1], v[i]); best[i][1] = dp[i][1]; pref[i] = pref[i - 1] + v[i]; } dp[0][0] = 0; dp[0][1] = inf; for(int q = 2; q <= k; q++) { for(int i = 1; i <= n; i++) { ll maior = v[i]; if(i < q) dp[i][q] = inf; if(i == q) { dp[i][q] = pref[i]; best[i][q] = v[i]; continue; } for(int j = i; j >= 1; j--) { maior = max(maior, v[j]); dp[i][q] = min(dp[i][q], dp[j - 1][q - 1] + maior); } /*if(i < q) dp[i][q] = inf; if(i == q) { dp[i][q] = pref[i]; best[i][q] = v[i]; continue; } ll A = dp[i - 1][q] + max(v[i] - best[i - 1][q], 0LL); ll B = dp[i - 1][q - 1] + v[i]; if(A <= B) best[i][q] = max(v[i], best[i - 1][q]); else best[i][q] = v[i]; dp[i][q] = min(A, B);*/ } } cout<<dp[n][k]<<'\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...