Pagini recente » Cod sursa (job #1803279) | Cod sursa (job #2442750) | Cod sursa (job #3032457) | Cod sursa (job #2346983) | Cod sursa (job #1467167)
#include <fstream>
#include <algorithm>
using namespace std;
const int kMaxN = 205;
const int kInf = (1U << 31) - 1;
ifstream fin("wanted.in");
ofstream fout("wanted.out");
int N;
pair<int, int> p[kMaxN];
int d[kMaxN][kMaxN][2];
void Read() {
fin >> N;
for (int i = 0; i < N; ++i)
fin >> p[i].first >> p[i].second;
sort(p, p + N);
}
int Abs(int x) {
return x < 0 ? -x : x;
}
int Solve(int l, int r, int s) {
if (l > r) return 0;
int st = s ? p[r + 1].first : p[l - 1].first;
if (l == r) return Abs(st - p[l].first) + Abs(p[l].second);
if (!d[l][r][s]) {
int best = kInf;
for (int i = l; i <= r; ++i)
best = min(best, Abs(st - p[i].first) + 2 * Abs(p[i].second) +
max(Solve(l, i - 1, 1), Solve(i + 1, r, 0)));
d[l][r][s] = best;
}
return d[l][r][s];
}
int main() {
Read();
int ans = kInf;
for (int i = 0; i < N; ++i)
ans = min(ans, Abs(p[i].first) + 2 * Abs(p[i].second) +
max(Solve(0, i - 1, 1), Solve(i + 1, N - 1, 0)));
fout << ans << "\n";
return 0;
}