Cod sursa(job #593255)

Utilizator SpiderManSimoiu Robert SpiderMan Data 1 iunie 2011 21:01:17
Problema Wanted Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
# include <algorithm>
# include <cstdio>
using namespace std;

# define x first
# define y second

typedef pair <int, int> PR ;
const char *FIN = "wanted.in", *FOU = "wanted.out" ;
const int MAX = 205, oo = 0x7FFFFFFF ;

PR V[MAX] ;
int dp[MAX][MAX] ;
int N ;

int main (void) {
    freopen (FIN, "r", stdin) ;

    scanf ("%d", &N) ;
    for (int i = 1; i <= N; ++i)
        scanf ("%d %d", &V[i].x, &V[i].y) ;
    sort (V + 1, V + N + 1) ;
    for (int k = 2; k <= N; ++k) {
        for (int i = 1, j; i <= N - k + 1; ++i) {
            dp[i][j = i + k - 1] = oo ;
            for (int l = i + 1; l <= j; ++l)
                dp[i][j] = min (dp[i][j], max (dp[l][i + 1], dp[l][j]) + V[l].x - V[i].x + V[l].y + V[i].y);
            dp[j][i] = oo ;
            for (int l = i; l < j; ++l)
                dp[j][i] = min (dp[j][i], max (dp[l][j - 1], dp[l][i]) + V[j].x - V[l].x + V[l].y + V[j].y);
        }
    }
    int sol = oo ;
    for (int i = 1; i <= N; ++i)
        sol = min (sol, max (dp[i][1], dp[i][N]) + abs (V[i].x) + V[i].y) ;
    fprintf (fopen (FOU, "w"), "%d", sol) ;
}