Cod sursa(job #1498706)

Utilizator GinguIonutGinguIonut GinguIonut Data 8 octombrie 2015 22:53:21
Problema Wanted Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <algorithm>
#include <limits.h>
#define nMax 202
using namespace std;
ifstream fin("wanted.in");
ofstream fout("wanted.out");
int dp[2][nMax][nMax], n, i, Min, len, j, k;
struct Car
{
    int x;
    int y;
}v[nMax];
int cmp(Car o, Car p)
{
    return o.x<p.x;
}
int dist(int a, int b)
{
    if(a>n||b>n)
        return 0;
    return abs(v[a].x-v[b].x)+v[a].y+v[b].y;
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i].x>>v[i].y;
    sort(v+1, v+n+1, cmp);
    for(i=1;i<=n;i++)
    {
        dp[0][i][i]=dist(i, i-1);
        dp[1][i][i]=dist(i, i+1);
    }
    for(i=n-1;i>=1;i--)
        for(j=i+1;j<=n;j++)
        {
            Min=INT_MAX;
            for(k=i;k<=j;k++)
            {
                len=max(dp[0][k+1][j], dp[1][i][k-1])+dist(j+1, k);
                Min=min(Min, len);
            }
            dp[1][i][j]=Min;
            Min=INT_MAX;
            for(k=i;k<=j;k++)
            {
                len=max(dp[0][k+1][j], dp[1][i][k-1])+dist(i-1, k);
                Min=min(Min, len);
            }
            dp[0][i][j]=Min;
        }
    fout<<dp[0][1][n];
    return 0;
}