제출 #122642

#제출 시각아이디문제언어결과실행 시간메모리
122642eohomegrownapps선물상자 (IOI15_boxes)C++14
70 / 100
2067 ms308444 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

long long delivery(int N, int K, int L, int p[]) {
    ll n = N, k=K, l=L;
    vector<ll> dp(n+1,0);
    multiset<ll> pset;
    multiset<ll> dpset;
    
    for (ll i = 1; i<=n; i++){
        /*ll minval = -1;
        for (ll j = max((i-k+1),0LL); j<=i; j++){
            //from j to i inclusive.
            ll val = min((l-p[j])*2LL,min(l,p[i]*2LL));
            if (j>0){
                val+=dp[j-1];
            }
            if (minval==-1||minval>val){
                minval=val;
            }
        }*/
        
        pset.insert((l-p[i-1])*2+dp[i-1]);
        dpset.insert(dp[i-1]);
        //cout<<"pset ";for (ll it : pset){cout<<it<<" ";}cout<<endl;
        //cout<<"dpset ";for (ll it : dpset){cout<<it<<" ";}cout<<endl;
        ll a = (*pset.begin());
        ll b = (*dpset.begin())+l;
        ll c = (*dpset.begin())+p[i-1]*2;
        dp[i]=min(min(a,b),c);

        //cout<<dp[i]<<endl;
        if (i-k>=0){
            ll prem=(l-p[i-k])*2;
            prem+=dp[i-k];
            ll dprem=dp[i-k];
            dpset.erase(dpset.find(dprem));
            pset.erase(pset.find(prem));
        }
    }
    return dp[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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...