Pagini recente » Cod sursa (job #330452) | Cod sursa (job #3278561) | Cod sursa (job #3207168) | Cod sursa (job #2599957) | Cod sursa (job #1466750)
#include <fstream>
#include <unordered_map>
#include <algorithm>
using namespace std;
const int kMaxN = 205;
ifstream fin("wanted.in");
ofstream fout("wanted.out");
int N;
pair<int, int> p[kMaxN];
unordered_map<int, int> d[kMaxN][kMaxN];
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 st) {
if (l > r) return 0;
if (l == r) return Abs(st - p[l].first) + Abs(p[l].second);
if (!d[l][r].count(st)) {
int best = (1 << 31) - 1;
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, p[i].first), Solve(i + 1, r, p[i].first)));
d[l][r][st] = best;
}
return d[l][r][st];
}
int main() {
Read();
fout << Solve(0, N - 1, 0) << "\n";
return 0;
}