Cod sursa(job #25644)

Utilizator pelaspateSorin Fagateanu pelaspate Data 4 martie 2007 13:15:53
Problema Magazin Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.02 kb
const maxn=1000;
var t:TExt;
   Px,Py,O:array[0..maxn]of longint;
   j,n,m,d,p,suma,cat,pas,i,x,y,sol,old,aux:longint;
   function min(a,b:longint):longint;begin if a>b then min:=b else min:=a;end;
begin
   randomize;sol:=maxlongint;
   assign(t,'magazin.in');reset(T);readln(t,p,n,m,d);
   for i:=1 to P do begin readln(t,Px[i],Py[i]);O[i]:=i;end;
   old:=sol;O[p+1]:=p+1;PX[0]:=0;Py[0]:=0;PX[p+1]:=n+1;Py[0]:=0;O[0]:=0;
   repeat
      for pas:=1 to 100 do
      begin
         for cat:=1 to 20 do
         begin
            i:=random(p)+1;j:=random(p)+1;aux:=O[i];O[i]:=O[j];O[j]:=aux;
         end;
         for i:=1 to p+1 do
         begin
            if Px[O[i-1]]=Px[O[i]] then inc(suma,abs(Py[O[i-1]]-Py[O[i]])) else
            begin
               inc(suma,abs(Px[O[i-1]]-Px[O[i]])*D+min(Py[O[i-1]]+Py[O[i]],2*m+2-Py[O[i-1]]-Py[O[i]]));
            end;
         end;
         if suma<sol then sol:=suma;
      end;
   until old=sol;
   assign(T,'magazin.out');rewrite(T);writeln(T,sol);close(T);
end.