#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |