Cod sursa(job #1467167)

Utilizator vladrochianVlad Rochian vladrochian Data 2 august 2015 22:59:39
Problema Wanted Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#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;
}