이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "aliens.h"
#include <bits/stdc++.h>
using namespace std;
#define rall(s) s.rbegin(), s.rend()
#define all(s) s.begin(), s.end()
#define sz(s) (int)s.size()
#define s second
#define f first
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int N = 2e5 + 5;
const ll inf = 1e18;
long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) {
vector<pii> s;
for (int i = 0; i < n; i++) {
int x = min(r[i], c[i]) + 1;
int y = max(r[i], c[i]) + 1;
s.push_back({x, y});
}
sort(all(s));
int mx[n];
for (int i = 0; i < n; i++) {
if (i) mx[i] = mx[i - 1];
else mx[i] = 0;
mx[i] = max(mx[i], s[i].s);
}
ll dp[n + 1][k + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= k; j++) {
dp[i][j] = inf;
}
}
dp[0][k] = 0;
for (int i = 0; i < n; i++) {
int x = (i ? mx[i - 1] : 0);
x = max(x, s[i].f - 1);
vector<pii> h;
for (int j = i; j < n; j++) {
h.push_back({s[j].s, j});
}
sort(rall(h));
int mn = m + 1, p = n, ok = 1;
for (int j = 0; j < sz(h); j++) {
if (ok) {
ll cost = h[j].f - s[i].f + 1;
cost *= cost;
//cout << h[j].f << ' ' << s[i].f << " ";
cost -= (x - s[i].f + 1) * 1ll * (x - s[i].f + 1);
//cout << cost << ' ' << p << ' ' << h[j].s << endl;
for (int y = 1; y <= k; y++) {
dp[p][y - 1] = min(dp[p][y - 1], dp[i][y] + cost);
}
}
int id = h[j].s;
if (id == i) ok = 0;
if (s[id].f <= mn) {
mn = s[id].f;
p = id;
}
}
}
ll ans = inf;
for (int i = 0; i <= k; i++) ans = min(ans, dp[n][i]);
return ans;
}
# | 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... |