Cod sursa(job #2718864)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 9 martie 2021 12:02:12
Problema Wanted Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>

#define inf (1 << 30)
#define NMAX 205
using namespace std;

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

struct chestie{
    int x, y;
}v[NMAX];

int dp[2][NMAX][NMAX];

inline bool cmp(chestie a, chestie b){
    return a.x < b.x;
}

int work(int st, int dr, int cp){
    if(st > dr)
        return 0;

    if(dp[cp][st][dr] == inf){
        for(int k = st; k <= dr; ++k){
            int val = max(work(st, k - 1, 1), work(k + 1, dr, 0));
            if(cp == 0)
                dp[cp][st][dr] = min(dp[cp][st][dr], abs(v[k].x - v[st - 1].x) + v[k].y + v[st - 1].y + val);
            else dp[cp][st][dr] = min(dp[cp][st][dr], abs(v[k].x - v[dr + 1].x) + v[k].y + v[st + 1].y + val);
        }
    }
    return dp[cp][st][dr];
}

int main()
{
    int n;
    fin >> n;

    for(int i = 1; i <= n; ++i)
        fin >> v[i].x >> v[i].y;

    sort(v + 1, v + n + 1, cmp);

    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= n; ++j)
            dp[0][i][j] = dp[1][i][j] = inf;

    fout << work(1, n, 0) << '\n';
    return 0;
}