Cod sursa(job #2331512)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 29 ianuarie 2019 17:34:37
Problema Wanted Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<fstream>
#include<algorithm>
#define x first
#define y second
using namespace std;
ifstream fi("wanted.in");
ofstream fo("wanted.out");
int n,i,j,k,Dp[2][205][205],rez,v1,v2;
pair<int,int> A[205];

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

int main()
{
    fi>>n;
    for(i=1; i<=n; i++)
        fi>>A[i].x>>A[i].y;
    sort(A+1,A+n+1);
    for(i=1; i<=n; i++)
        Dp[0][i][i]=Dp[1][i][i]=modul(A[i].y);
    for(i=n-1; i>=1; i--)
        for(j=i+1; j<=n; j++)
        {
            Dp[0][i][j]=Dp[1][i][j]=2000000000;
            for(k=i; k<=j; k++)
            {
                if(i==k)
                    v1=0;
                else
                    v1=1;
                if(j==k)
                    v2=0;
                else
                    v2=1;
                Dp[0][i][j]=min(Dp[0][i][j],max(Dp[1][i][k-1]+v1*(A[k].x-A[k-1].x),Dp[0][k+1][j]+v2*(A[k+1].x-A[k].x))+2*modul(A[k].y)+A[k].x-A[i].x);
                Dp[1][i][j]=min(Dp[1][i][j],max(Dp[1][i][k-1]+v1*(A[k].x-A[k-1].x),Dp[0][k+1][j]+v2*(A[k+1].x-A[k].x))+2*modul(A[k].y)+A[j].x-A[k].x);
            }
        }
    rez=2000000000;
    for(i=1; i<=n; i++)
        rez=min(rez,max(Dp[1][1][i-1]+A[i].x-A[i-1].x,Dp[0][i+1][n]+A[i+1].x-A[i].x)+modul(A[i].x)+2*modul(A[i].y));
    fo<<rez<<"\n";
    fi.close();
    fo.close();
    return 0;
}