제출 #1238882

#제출 시각아이디문제언어결과실행 시간메모리
1238882MarwenElarbi나일강 (IOI24_nile)C++20
67 / 100
2096 ms6216 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
const int nax = 1e5+5;
long long dp[nax];
std::vector<long long> calculate_costs(std::vector<int> W, std::vector<int> A,
                                       std::vector<int> B, std::vector<int> E) {
    int n=A.size();
    int q=E.size();
    vector<pair<int,pair<int,int>>> tab(n);
    vector<long long> answer(q);
    for (int i = 0; i < n; ++i) tab[i]={W[i],{A[i],B[i]}};
    sort(tab.begin(),tab.end());
    for (int i = 0; i < n; ++i)
    {
        W[i]=tab[i].fi;
        A[i]=tab[i].se.fi;
        B[i]=tab[i].se.se;
    }
    for (int k = 0; k < q; ++k)
    {
        int d = E[k];
        memset(dp,0,sizeof dp);
        for (int i = 0; i < n; ++i)
        {
            dp[i]=1e18;
            long long cur=0;
            int mn=1e9;
            for (int j = i; j > i-4; --j)
            {
                if(j<0) break;
                if(W[i]-W[j]>d) break;
                cur+=B[j];
                mn=min(mn,A[j]-B[j]);
                if((i-j+1)%2) dp[i]=min(dp[i],cur+mn+(j ? dp[j-1] : 0));
                else dp[i]=min(dp[i],cur+(j ? dp[j-1] : 0));
            }
        }
        answer[k]=dp[n-1];
    }
    return answer;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...