ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1029. Ministry

CAn anybody help me?I got TL!
Posted by ACer 6 May 2003 16:38
const max=101;
      max2=501;
var n,m,i,j,len:longint;
    a:array[1..max,1..max2]of extended;
    b:array[1..max,1..max2]of longint;
    d:array[1..max2]of extended;
    min:extended;

function done(l,r:longint):extended;
var i:longint;
    sum,mint:extended;
begin
     mint:=a[l,r]+a[l+1,r];
     b[l,r]:=r;
     sum:=0;
     for i:=r downto 1 do begin
         sum:=sum+a[l,i];
         sum:=sum+a[l+1,i];
         if sum<mint then begin mint:=sum;
                                b[l,r]:=i;
                                end;
         sum:=sum-a[l+1,i];
         end;
         sum:=0;
         for i:=r to m do begin
         sum:=sum+a[l,i];
         sum:=sum+a[l+1,i];
         if sum<mint then begin mint:=sum;
                                b[l,r]:=i;
                                end;
         sum:=sum-a[l+1,i];
         end;
     done:=mint;
end;
procedure output(han:longint);
var i,k,h:longint;
    c:array[1..max*max2]of longint;
begin
     h:=1;
     fillchar(c,sizeof(c),0);
     k:=0;
     while h<=n do begin
           if b[h,han]>han then
           for i:=han to b[h,han] do begin
           inc(k);
           c[k]:=i;
           end
           else for i:=han downto b[h,han] do begin
                inc(k);
                c[k]:=i;
                end;
           han:=b[h,han];
           inc(h);
           end;
     for i:=1 to k do writeln(c[i]);
end;
begin
     read(n);
     read(m);
     for i:=1 to n do
         for j:=1 to m do
             read(a[i,j]);
     for i:=n downto 1 do begin
         for j:=1 to m do d[j]:=done(i,j);
         for j:=1 to m do a[i,j]:=d[j];
         end;
    min:=a[1,1];len:=1;
    for i:=2 to m do
        if min>a[1,i] then begin min:=a[1,i];len:=i;end;
    output(len);
end.
Re: CAn anybody help me?I got TL!
Posted by Климов Михаил 14 May 2003 05:24
I solved this problem using dijkstra for each floor, it works O(M*N^2).
Try to use {$Q-,R-,S-,I-}