Cod sursa(job #480115)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 26 august 2010 14:34:38
Problema Wanted Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

#define INF 2000000007
#define minim(a,b) (a<b ? a : b)
#define maxim(a,b) (a>b ? a : b)
#define modul(a) (a<0 ? -a : a)

int a[205][205],b[205][205];
int solm=INF,n;

struct point
{
	int x,y;
};
point v[202];

int cmp(const point& a,const point& b)
{
    return a.x<b.x;
}

int main ()
{
    int i,j,k,al,d;
    int sol,dist;
	freopen("wanted.in","r",stdin);
	freopen("wanted.out","w",stdout);
    
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d %d",&v[i].x,&v[i].y);
        
	sort(v+1,v+n+1,cmp);
    for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
            a[i][j]=b[i][j]=INF;

	for(d=1;d<=n;d++)
		for(i=1,j=i+d-1;j<=n;i++ && j++)
			for(k=i;k<=j;k++)
			{
                al=maxim(a[k+1][j],b[i][k-1]);
                dist=v[i-1].y+v[k].x-v[i-1].x+v[k].y;
				a[i][j]=minim(a[i][j],al+dist);
                dist=v[k].y+v[j+1].x-v[k].x+v[j+1].y;
				b[i][j]=minim(b[i][j],al+dist);
			}
	
    for(i=1;i<=n;i++)
    {
        sol=maxim(b[1][i-1],a[i+1][n]);
        dist=v[i].y+modul(v[i].x);
        solm=minim(solm,sol+dist);
    }
	printf("%d\n",solm);
	return 0;
}