Pagini recente » Cod sursa (job #1509217) | Cod sursa (job #3134100) | Cod sursa (job #1397552) | Cod sursa (job #39510) | Cod sursa (job #1413035)
#include<cstdio>
#include<vector>
#define ics first
#define igrec second
#include<algorithm>
using namespace std;
int abs(int x)
{
if(x>0)
{
return x;
}
return -x;
}
int max(int x,int y)
{
if(x>y)
{
return x;
}
return y;
}
int d,d1[201][201],d2[201][201],i,n,k,i2,mn;
pair<int,int> a[201];
int main()
{
freopen("wanted.in","r",stdin);
freopen("wanted.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&a[i].ics,&a[i].igrec);
}
if(n==1)
{
printf("%d\n",a[1].igrec);
return 0;
}
a[0].ics=a[0].igrec=0;
sort(a+1,a+n+1);
for(i=2;i<=n;i++)
{
d1[i][i]=0;
d2[i][i]=0;
d1[i][i+1]=abs(a[i].ics-a[i+1].ics)+a[i+1].igrec;
d2[i][i+1]=abs(a[i].ics-a[i+1].ics)+a[i].igrec;
}
for(i=2;i<n;i++)
{
for(i2=i+1;i2<=n;i2++)
{
d=i2-i;
d1[d][i2]=abs(a[d].ics-a[i2].ics)+2*a[i2].igrec+d2[d+1][i2];
d2[d][i2]=abs(a[d].ics-a[i2].ics)+2*a[d].igrec+d1[d][i2-1];
for(k=d+1;k<i2;k++)
{
if(abs(a[d].ics-a[k].ics)+2*a[k].igrec+max(d2[d+1][k],d1[k][i2])<d1[d][i2])
{
d1[d][i2]=abs(a[d].ics-a[k].ics)+2*a[k].igrec+max(d2[d+1][k],d1[k][i2]);
}
if(abs(a[d].ics-a[i2].ics)+2*a[k].igrec+max(d2[d][k],d1[k][i2-1])<d2[d][i2])
{
d2[d][i2]=abs(a[d].ics-a[i2].ics)+2*a[k].igrec+max(d2[d][k],d1[k][i2-1]);
}
}
}
}
mn=2000000000;
for(i=1;i<=n;i++)
{
if(abs(a[i].ics)+2*a[i].igrec+max(d2[1][i],d1[i][n])<mn)
{
mn=abs(a[i].ics)+2*a[i].igrec+max(d2[1][i],d1[i][n]);
}
}
printf("%d\n",mn);
}