| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1306840 | michael12 | Nile (IOI24_nile) | C++20 | 0 ms | 0 KiB |
#include "nile.h"
#include<bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define int long long
using namespace std;
const int maxn = 5e5;
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();
vector<array<int,3>> at(N);
for (int i = 0; i < N; i++) {
at[i] = {W[i], A[i], B[i]};
}
sort(at.begin(), at.end());
long long sm = 0;
for (int i = 0; i < N; i++) {
sm += at[i][1];
}
vector<long long> res(Q);
for (int qi = 0; qi < Q; qi++) {
int D = E[qi];
vector<long long> dp(N, 0);
for (int i = 0; i < N; i++) {
if (i > 0) dp[i] = dp[i - 1];
for (int j = i - 1; j >= 0; j--) {
if (at[i][0] - at[j][0] > D) break;
long long sv =
(long long)at[i][1] + at[j][1]
- at[i][2] - at[j][2];
if (j > 0)
dp[i] = max(dp[i], dp[j - 1] + sv);
else
dp[i] = max(dp[i], sv);
}
}
res[qi] = sm - dp[N - 1];
}
return res;
}
// signed main() {
// int n;
// cin >> n;
// vector<int> W(n), A(n), B(n);
// for (int i = 0; i < n; i++) {
// cin >> W[i] >> A[i] >> B[i];
// }
// int Q;
// cin >> Q;
// vector<int> E(Q);
// for (int i = 0; i < Q; i++) {
// cin >> E[i];
// }
// vector<long long> ans = calculate_costs(W, A, B, E);
// for (long long x : ans) {
// cout << x << "\n";
// }
// return 0;
// }
