제출 #1309384

#제출 시각아이디문제언어결과실행 시간메모리
1309384trigon나일강 (IOI24_nile)C++20
17 / 100
2095 ms6188 KiB
#include <bits/stdc++.h>
using namespace std;

struct Artifact {
    int weight, A, B;
};

vector<long long> calculate_costs(
    vector<int> W, vector<int> A, vector<int> B, vector<int> E) 
{
    int N = W.size();
    int Q = E.size();

    // Build artifacts
    vector<Artifact> artifacts(N);
    for (int i = 0; i < N; i++) {
        artifacts[i] = {W[i], A[i], B[i]};
    }

    // Sort artifacts by weight
    sort(artifacts.begin(), artifacts.end(), [](const Artifact &a, const Artifact &b){
        return a.weight < b.weight;
    });

    // Answers vector
    vector<long long> answers(Q);

    for (int q_idx = 0; q_idx < Q; q_idx++) {
        int D = E[q_idx];
        vector<long long> dp(N + 1, LLONG_MAX);
        dp[0] = 0; // cost of transporting 0 artifacts is 0

        for (int i = 0; i < N; i++) {
            // Option 1: send i-th artifact alone
            dp[i + 1] = min(dp[i + 1], dp[i] + artifacts[i].A);

            // Option 2: pair i-th with (i+1)-th if allowed
            if (i + 1 < N && abs(artifacts[i + 1].weight - artifacts[i].weight) <= D) {
                dp[i + 2] = min(dp[i + 2], dp[i] + artifacts[i].B + artifacts[i + 1].B);
            }
        }

        answers[q_idx] = dp[N];
    }

    return answers;
}


#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...