Pagini recente » Borderou de evaluare (job #171915) | Cod sursa (job #1925062) | Cod sursa (job #440423) | Cod sursa (job #471122) | Cod sursa (job #479179)
Cod sursa(job #479179)
#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";
}