Cod sursa(job #1819253)

Utilizator ancabdBadiu Anca ancabd Data 30 noiembrie 2016 14:03:18
Problema Wanted Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("wanted.in");
ofstream fout("wanted.out");

#define MAX 201
#define Inf (1U << 31) - 1

int n;
pair<int, int> p[MAX];
int d[MAX][MAX][2];

int abs(int x)
{
    if (x > 0)return x;
    else return -x;
}

int solve(int l, int r, int s)
{
    if (l > r) return 0;

    int st;
    if (s)st = p[r + 1].first;
    else st = p[l - 1].first;

    if (l == r) return abs(st - p[l].first) + abs(p[l].second);

    if (!d[l][r][s])
    {
        int b = Inf;
        for (int i = l; i <= r; ++i)
            b = min(b, 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] = b;
    }
    return d[l][r][s];
}

int main()
{
    fin >> n;
    for (int i = 0; i < n; ++i)
        fin >> p[i].first >> p[i].second;
    sort(p, p + n);

    int x = Inf;
    for (int i = 0; i < n; ++i)
        x = min(x, abs(p[i].first) + 2 * abs(p[i].second) + max(solve(0, i - 1, 1), solve(i + 1, n - 1, 0)));
    fout << x << "\n";
    return 0;
}