Pagini recente » Cod sursa (job #28269) | Cod sursa (job #3210665) | Cod sursa (job #106761) | Cod sursa (job #70535) | Cod sursa (job #2149028)
#include <cstdio>
#include <iostream>
#include <algorithm>
#define INF 2000000000
using namespace std;
int modul (int x){
if (x>=0)
return x;
return -x;
}
int d[2][201][201];
pair <int,int> v[201];
void maxoptim (int poz,int st,int dr){
int drum,x;
//if (st==1 && dr==1)
// printf ("%d %d\n",st,dr);
if (d[poz][st][dr])
return;
if (st>dr)
return ;
d[poz][st][dr]=INF;
if (st==dr){
if (poz==0)
d[poz][st][dr]=v[st].second+modul (v[st].first-v[st-1].first);
else d[poz][st][dr]=v[st].second+modul (v[st].first-v[dr+1].first);
return;
}
for (x=st;x<=dr;x++){
if (!poz)
drum=2*v[x].second+modul (v[x].first-v[st-1].first);
else drum=2*v[x].second+modul (v[x].first-v[dr+1].first);
maxoptim (0,x+1,dr);
maxoptim(1,st,x-1);
d[poz][st][dr]=min(d[poz][st][dr],drum + max(d[0][x+1][dr],d[1][st][x-1]));
}
}
int main()
{
FILE *fin=fopen ("wanted.in","r");
FILE *fout=fopen ("wanted.out","w");
int n,i;
fscanf (fin,"%d",&n);
for (i=1;i<=n;i++)
fscanf (fin,"%d%d",&v[i].first,&v[i].second);
sort (v+1,v+n+1);
maxoptim(0,1,n);
fprintf (fout,"%d",d[0][1][n]); // maxoptim e un fel de cautare binara la care ma duc pe ambele ramuri
return 0;
}