제출 #1307209

#제출 시각아이디문제언어결과실행 시간메모리
1307209samarthkulkarniStove (JOI18_stove)C++20
50 / 100
1096 ms2788 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define vi vector<long long> #define all(x) x.begin(), x.end() #define endl "\n" void solution(); int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); solution(); return 0; } const int N = 1e5+10; ll a[N]; ll cost(int i, int j) { return a[j]+1 - a[i]; } vi dp; void dnc(int l, int r, int optl, int optr, vi &ndp) { if (l > r) return; int mid = (l + r)/2; int best = mid; for (int i = optl; i <= min(mid, optr); i++) { if (ndp[mid] > dp[i-1] + cost(i, mid)) { best = i; ndp[mid] = dp[i-1] + cost(i, mid); } } dnc(l, mid-1, optl, best, ndp); dnc(mid+1, r, best, optr, ndp); } void solution() { ll n, k; cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; dp.resize(n+1, 1e18); dp[0] = 0; for (int i = 1; i <= k; i++) { vi ndp(n+1, 1e18); dnc(1, n, 1, n, ndp); dp = move(ndp); } cout << dp[n] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...