Submission #1370653

#TimeUsernameProblemLanguageResultExecution timeMemory
1370653Cyanberry나일강 (IOI24_nile)C++20
17 / 100
2094 ms7332 KiB
#include "nile.h"
#include <bits/stdc++.h>
#define int long long
using namespace std;

struct artifact {
	int weight;
	int good;
	int bad;
	auto operator<=>(const artifact&) const = default;
};

std::vector<long long> calculate_costs(std::vector<signed> weights, std::vector<signed> bad, std::vector<signed> good, std::vector<signed> queries) {
	int N = weights.size();
	vector<artifact> arts{};
	for (int i = 0; i < N; ++i) {
		arts.push_back({weights[i], good[i], bad[i]});
	}
	ranges::sort(arts);
	int Q = (int)queries.size();
	vector<long long> ret(Q, 0);
	for (int query = 0; query < Q; ++query) {
		vector<int> dp(N + 2, INT_MAX);
		dp[0] = 0;
		for (int i = 0; i < N; ++i) {
			dp[i+1] = min(dp[i+1], dp[i] + arts[i].bad);
			if (i < N-1) {
				if (arts[i+1].weight - arts[i].weight <= queries[query]) {
					dp[i+2] = min(dp[i+2], dp[i] + arts[i].good + arts[i+1].good);
				}
			}
			if (i < N-2) {
				if (arts[i+2].weight - arts[i].weight <= queries[query]) {
					dp[i+3] = min(dp[i+3], dp[i] + arts[i].good + arts[i+1].bad + arts[i+2].good);
				}
			}
		}
		ret[query] = dp[N];
	}
	return ret;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...