Cod sursa(job #1744955)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 20 august 2016 19:25:45
Problema Wanted Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <algorithm>
#define x first
#define y second

using namespace std;

ifstream cin("wanted.in");
ofstream cout("wanted.out");

const int MAXN = 210;
const int INF = 2000000000;

int Abs(int x) {
    if (x < 0)
        return -x;
    return x;
}

pair<int, int> v[MAXN];
int dp[2][MAXN][MAXN];

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> v[i].x >> v[i].y;
    sort(v + 1, v + n + 1);
    for (int l = 1; l <= n; l++)
        for (int i = 1; i + l - 1 <= n; i++) {
            int j = i + l - 1;
            dp[0][i][j] = dp[1][i][j] = INF;
            for (int k = i; k <= j; k++) {
                dp[0][i][j] = min(dp[0][i][j], Abs(v[k].x - v[i - 1].x) + Abs(v[k].y) + Abs(v[i - 1].y) + max(dp[1][i][k - 1], dp[0][k + 1][j]));
                if (j != n)
                    dp[1][i][j] = min(dp[1][i][j], Abs(v[k].x - v[j + 1].x) + Abs(v[j].y) + Abs(v[j + 1].y) + max(dp[1][i][k - 1], dp[0][k + 1][j]));
            }
        }
    cout << dp[0][1][n];
    return 0;
}