Cod sursa(job #479179)

Utilizator freak93Adrian Budau freak93 Data 23 august 2010 11:03:48
Problema Wanted Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<algorithm>
#define sat pair<int,int>
#define x first
#define y second

using namespace std;

const char iname[]="wanted.in";
const char oname[]="wanted.out";
const int maxn=205;
const int inf=(1<<31)-1;

ifstream f(iname);
ofstream g(oname);

sat s[maxn];
int i,j,k,a[maxn][maxn],b[maxn][maxn],n,rez;

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
        f>>s[i].x>>s[i].y;
    sort(s+1,s+n+1);
    for(i=1;i<=n;++i)
    {
        if(i>1)
            a[i][i]=s[i].x-s[i-1].x+s[i].y+s[i-1].y;
        if(i<n)
            b[i][i]=s[i+1].x-s[i].x+s[i].y+s[i+1].y;
    }
    for(i=1;i<n-1;++i)
        for(j=n-i;j;--j)
        {
            if(j>1)
            {
                a[j][j+i]=inf;
                for(k=j;k<=j+i;++k)
                    a[j][j+i]=min(a[j][j+i],max(b[j][k-1],a[k+1][j+i])+s[k].x-s[j-1].x+s[k].y+s[j-1].y);
            }
            if(j+i<n)
            {
                b[j][j+i]=inf;
                for(k=j;k<=j+i;++k)
                    b[j][j+i]=min(b[j][j+i],max(b[j][k-1],a[k+1][j+i])+s[j+i+1].x-s[k].x+s[k].y+s[j+i+1].y);
            }
        }
    rez=inf;
    for(k=1;k<=n;++k)
        rez=min(rez,max(b[1][k-1],a[k+1][n])+s[k].y+max(s[k].x,-s[k].x));
    g<<rez<<"\n";
}