Cod sursa(job #2405949)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 15 aprilie 2019 10:50:17
Problema Wanted Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <climits>
#include <algorithm>
#include <cmath>

using namespace std;

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

int d[205][205][5];
struct gigi
{
    int x, y;
}v[205];

int comp(gigi a, gigi b)
{
    return a.x < b.x;
}

int nuj(int st, int dr, int dir)
{
    if (st > dr)
        return 0;
    if (d[st][dr][dir] == INT_MAX)
        for (int i = st; i <= dr; i++)
        {
            int x = max(nuj(st, i - 1, 1), nuj(i + 1, dr, 0));
            if (dir == 0)
                d[st][dr][0] = min(d[st][dr][0], x + v[st - 1].y + v[i].y + abs(v[i].x - v[st - 1].x));
            else
                d[st][dr][1] = min(d[st][dr][1], x + v[dr + 1].y + v[i].y + abs(v[dr + 1].x - v[i].x));
        }
    return d[st][dr][dir];
}

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, comp);
    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= n; j++)
        {
            d[i][j][0] = INT_MAX;
            d[i][j][1] = INT_MAX;
        }
    fout << nuj(1, n, 0) << '\n';
    return 0;
}