Pagini recente » Cod sursa (job #1077084) | Cod sursa (job #1597261) | Cod sursa (job #2363833) | Cod sursa (job #731175) | Cod sursa (job #168015)
Cod sursa(job #168015)
#include <stdio.h>
#include <stdlib.h>
struct ceva
{
int a,b;
};
ceva a[300];
int b[300][300],c[300][300];
inline int maxc(int x,int y)
{
if (x>y)
return x;
else return y;
}
inline int minc(int x,int y)
{
if (x<y&&y==-1)
return x;
else
return y;
}
int compare(const void *a,const void *b)
{
ceva *aa=(ceva*)a;
ceva *bb=(ceva*)b;
if (aa->a<bb->a)
return -1;
if (aa->a>bb->a)
return 1;
return 0;
}
int main()
{
int i,n,max,j,k,d,min;
FILE *in,*out;
in=fopen("wanted.in","r");
out=fopen("wanted.out","w");
fscanf(in,"%d",&n);
for (i=1;i<=n;i++)
{
fscanf(in,"%d%d",&a[i].a,&a[i].b);
}
qsort(a+1,n,sizeof(a[1]),compare);
for(i=1;i<=n;i++)
{
b[i][i]=a[i].b;
c[i][i]=a[i].b;
}
for (d=1;d<=n;d++)
{
for (i=1;i<=n&&i+d<=n;i++)
{
j=i+d;
b[i][j]=-1;
c[i][j]=-1;
for (k=i;k<=j;k++)
{
max=maxc(c[i][k-1]+a[k].a-a[k-1].a,b[k+1][j]+a[k+1].a-a[k].a);
b[i][j]=minc(b[i][j],a[k].a-a[i].a+2*a[k].b+max);
c[i][j]=minc(c[i][j],a[j].a-a[k].a+2*a[k].b+max);
}
/* b[i][i+j]=-1;
c[i][i+j]=-1;
for (k=0;k<=j;k++)
{
max=b[i+k][i+j];
if (c[i][i+k]>max)
max=c[i][i+k];
if (a[i].b+a[i+k].a+a[i].a+max<b[i][i+j]||b[i][i+j]==-1)
b[i][i+j]=a[i].b+a[i+k].a+a[i].a+max;
if (a[i+j].b+a[i+j].a-a[i+k].a+a[i+k].b+max<c[i][i+j]||c[i][i+j]==-1)
c[i][i+j]=a[i+j].b+a[i+j].a-a[i+k].a+a[i+k].b+max;
}
}*/
}
}
min=-1;
for (k=1;k<=n;k++)
min=minc(min,a[k].a+2*a[k].b+maxc(c[1][k-1]+a[k].a-a[k-1].a,b[k+1][n]+a[k+1].a-a[k].a));
fprintf(out,"%d\n",min);
fclose(in);
fclose(out);
return 0;
}