Cod sursa(job #1466750)

Utilizator vladrochianVlad Rochian vladrochian Data 30 iulie 2015 09:43:08
Problema Wanted Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#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;
}