#include <bits/stdc++.h>
#define in cin
#define out cout
#define int long long
using namespace std;
//ifstream in("in.in");
//ofstream out("out.out");
struct device {
int l, r, hole, cost;
};
vector<device> devices, sortDevices;
const int nmax = 505, inf = (1LL << 60);
int n, m, dp[205][nmax][nmax];
void minSelf(int &a, int b) {
if (b < a) {
a = b;
}
}
set<int> positions;
unordered_map<int, int> realToNorm, normToReal;
int32_t main() {
in >> n >> m;
if (m == 1) {
out << "0\n";
return 0;
}
devices.resize(n + 1);
sortDevices.resize(n + 1);
for (int i = 1; i <= n; i++) {
int l, r, hole, cost;
in >> l >> r >> hole >> cost;
devices[i] = {l, r, hole, cost};
sortDevices[i] = {l, r, hole, cost};
positions.insert(l);
positions.insert(r);
positions.insert(hole);
}
sort(sortDevices.begin() + 1, sortDevices.end(), [&](device x, device y) {
return x.l < y.l;
});
int r = 1;
for (int i = 1; i <= n; i++) {
if (sortDevices[i].l > r) {
out << "-1\n";
return 0;
}
r = max(r, sortDevices[i].r);
}
if (r < m) {
out << "-1\n";
return 0;
}
int nr = 0;
for (auto k : positions) {
nr++;
realToNorm[k] = nr;
normToReal[nr] = k;
}
for (int i = 1; i <= n; i++) {
devices[i].l = realToNorm[devices[i].l];
devices[i].r = realToNorm[devices[i].r];
devices[i].hole = realToNorm[devices[i].hole];
}
m = nr;
/// dp[i][l][r] = using only devices i...n, we have extended the road for the interval
/// l - r. sum will be in dp[1][1..m]
for (int i = 0; i <= n + 1; i++) {
for (int l = 0; l <= m; l++) {
for (int r = 0; r <= m; r++) {
dp[i][l][r] = inf;
}
}
}
for (int i = m; i >= 1; i--) {
dp[n + 1][i][i] = 0;
}
for (int i = n; i >= 1; i--) {
for (int l = 1; l <= m; l++) {
for (int r = l; r <= m; r++) {
minSelf(dp[i][l][r], dp[i + 1][l][r]);
if (dp[i + 1][l][r] == inf) continue;
if (l <= devices[i].hole && devices[i].hole <= r) {
int newL = min(l, devices[i].l);
int newR = max(r, devices[i].r);
minSelf(dp[i][newL][newR], dp[i + 1][l][r] + devices[i].cost);
minSelf(dp[i][l][r], dp[i + 1][l][r]);
}
}
}
}
if (dp[1][1][m] == inf) {
out << "-1\n";
} else {
out << dp[1][1][m] << "\n";
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
460 KB |
Output is correct |
2 |
Correct |
0 ms |
844 KB |
Output is correct |
3 |
Correct |
1 ms |
1356 KB |
Output is correct |
4 |
Correct |
1 ms |
1484 KB |
Output is correct |
5 |
Correct |
1 ms |
1612 KB |
Output is correct |
6 |
Correct |
1 ms |
716 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
844 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
460 KB |
Output is correct |
2 |
Correct |
0 ms |
844 KB |
Output is correct |
3 |
Correct |
1 ms |
1356 KB |
Output is correct |
4 |
Correct |
1 ms |
1484 KB |
Output is correct |
5 |
Correct |
1 ms |
1612 KB |
Output is correct |
6 |
Correct |
1 ms |
716 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
844 KB |
Output is correct |
9 |
Correct |
32 ms |
64972 KB |
Output is correct |
10 |
Correct |
83 ms |
160776 KB |
Output is correct |
11 |
Correct |
108 ms |
214232 KB |
Output is correct |
12 |
Incorrect |
252 ms |
404008 KB |
Output isn't correct |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
460 KB |
Output is correct |
2 |
Correct |
0 ms |
844 KB |
Output is correct |
3 |
Correct |
1 ms |
1356 KB |
Output is correct |
4 |
Correct |
1 ms |
1484 KB |
Output is correct |
5 |
Correct |
1 ms |
1612 KB |
Output is correct |
6 |
Correct |
1 ms |
716 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
844 KB |
Output is correct |
9 |
Correct |
32 ms |
64972 KB |
Output is correct |
10 |
Correct |
83 ms |
160776 KB |
Output is correct |
11 |
Correct |
108 ms |
214232 KB |
Output is correct |
12 |
Incorrect |
252 ms |
404008 KB |
Output isn't correct |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
460 KB |
Output is correct |
2 |
Correct |
0 ms |
844 KB |
Output is correct |
3 |
Correct |
1 ms |
1356 KB |
Output is correct |
4 |
Correct |
1 ms |
1484 KB |
Output is correct |
5 |
Correct |
1 ms |
1612 KB |
Output is correct |
6 |
Correct |
1 ms |
716 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
844 KB |
Output is correct |
9 |
Correct |
32 ms |
64972 KB |
Output is correct |
10 |
Correct |
83 ms |
160776 KB |
Output is correct |
11 |
Correct |
108 ms |
214232 KB |
Output is correct |
12 |
Incorrect |
252 ms |
404008 KB |
Output isn't correct |
13 |
Halted |
0 ms |
0 KB |
- |