type matrice=array[1..255,1..255] of word;
var f,g: text;
a,d:matrice;
m,n,i,j: byte;
max,min2,j_min: word;
procedure combin;
var i,j: byte;
begin
for i:=1 to m-1 do
for j:=1 to n do
d[i,j] := a[i+1,j] + a[i,j];
d[1,1] :=max;
end;
function get_l_min(i: byte): word;
var j: byte;
min: word;
begin
min := max;
min2 := max;
for j:=1 to n do
if d[i,j] < min then
begin
min := d[i,j];
j_min:= j;
end;
for j:=1 to n do
if (d[i,j] < min2) and (j <> j_min) then
min2 := d[i,j];
get_l_min := min;
end;
procedure min;
var i,j: byte;
l_min : word;
begin
for i:=2 to m-1 do
begin
l_min := get_l_min(i-1);
for j:=1 to n do
if j <> j_min then
d[i,j] := d[i,j] + l_min
else
d[i,j] := d[i,j] + min2;
end;
d[m-1,n] :=max;
end;
begin
assign(f, 'lacusta.in');
reset(f);
assign(g, 'lacusta.out');
rewrite(g);
max:=65530;
readln(f,m,n);
for i:=1 to m do
begin
for j:=1 to n do
read(f,a[i,j]);
readln(f);
end;
combin;
min;
writeln(g,get_l_min(m-1)+a[1,1]+a[m,n]);
close(f);
close(g);
end.
solutia oficiala in pascal iei 100p cu ea
