Cod sursa(job #2554637)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 23 februarie 2020 11:02:50
Problema Wanted Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <string.h>
#include <algorithm>
#include <vector>
#include <functional>
#include <fstream>
#include <iostream>

#define oo 1000000000
using namespace std;
ifstream f("wanted.in");
ofstream g("wanted.out");
struct coord{int x,y;};
coord v[205];
int dp[205][205][2],n;
bool cmp(coord a,coord b)
{
    return a.x<b.x;
}
int dist(int st,int dr,int dir)
{
    if(st>dr) return 0;
    if(dp[st][dr][dir]==oo)
    {
        for(int i=st;i<=dr;i++)
        {
            int val=max(dist(st,i-1,1),dist(i+1,dr,0));
                if(dir==0)
                {
                    dp[st][dr][0]=min(dp[st][dr][0],val+abs(v[i].x-v[st-1].x)+v[i].y+v[st-1].y);
                }
                else
                {
                    dp[st][dr][1]=min(dp[st][dr][1],val+abs(v[i].x-v[dr+1].x)+v[i].y+v[dr+1].y);
                }
        }
    }
    return dp[st][dr][dir];
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
    f>>v[i].x>>v[i].y;
}
sort(v+1,v+n+1,cmp);
for(int i=0;i<=n;i++)
{
    for(int j=0;j<=n;j++)
    {
        dp[i][j][0]=dp[i][j][1]=oo;
    }
}
g<<dist(1,n,0);
}