Submission #556057

#TimeUsernameProblemLanguageResultExecution timeMemory
556057HeatDroppaStove (JOI18_stove)C++14
50 / 100
1088 ms2644 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll lim=1e5+4; const ll inf=1e18; ll dp_new[lim]; ll dp_old[lim]; ll t[lim]; ll n,k; void solve(ll l,ll r,ll optl,ll optr) { if(l>r) return ; ll med=(l+r)>>1; pair<ll,ll> bst={inf,-1}; for(ll i=optl;i<=min(med,optr);++i) bst=min(bst,{dp_old[i-1]+t[med]-t[i]+1,i}); ll opt=bst.second; dp_new[med]=bst.first; solve(l,med-1,optl,opt); solve(med+1,r,opt,optr); } int main() { ios_base::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>k; for(ll i=1;i<=n;++i) cin>>t[i]; for(ll i=1;i<=n;++i) dp_old[i]=t[i]-t[1]+1; for(ll i=2;i<=k;++i) solve(i,n,i,n), swap(dp_old,dp_new); cout<<dp_old[n]<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...