Program rq396;
const d=1000;
Var a,f:array[-10..d,-10..d]of longint;
z:array[1..d,1..d]of integer;
n, m,i,j,k,l,p1,q1,p2,q2,max:longint;
bo:boolean;
Begin
readln(n,m);
For i:=1 to n do
begin
For j:=1 to m do
read(a[i,j]);
readln;
end;
f[1,1]:=a[1,1];
For i:=2 to n do
For j:=2 to m do
Begin
If a[i,j]<>-1 then
begin
p1:=i-1;
q1:=j-2;
p2:=i-2;
q2:=j-1;
If (p1>0)and(q1>0)and(a[p1,q1]<>-1) then
f[i,j]:=f[p1,q1]+a[i,j];
If (p2>0)and(q2>0)and(a[p2,q2]<>-1) then
if f[i,j]<a[i,j]+f[p2,q2]
then f[i,j]:=f[p2,q2]+a[i,j];
End;
End;
bo:=false;
For i:=1 to n do
For j:=m-1 to m do
begin
If a[i,j]<>-1 then bo:=true;
If max<f[i,j] then max:=f[i,j]
end;
For i:=n-1 to n do
For j:=1 to m do
Begin
If a[i,j]<>-1 then bo:=true;
If max<f[i,j] then max:=f[i,j];
end;
If not bo then begin
write(’cannot arrive’);
exit;
end;
write(max);
end.
var
i,j,k,m,n:longint;
x:array[0..1003,0..1003]of shortint;
maxx:array[0..1003,0..1003]of longint;
function maxn(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;
begin
k:=0;
readln(n,m);
fillchar(x,sizeof(x),0);
fillchar(maxx,sizeof(maxx),0);
for i:=1 to n do
for j:=1 to m do
read(x[i,j]);
maxx[1,1]:=x[1,1];
for i:=2 to n do
for j:=2 to m do
if (x[i,j]<>-1)and((maxx[i-1,j-2]>0)or(maxx[i-2,j-1]>0)) then
maxx[i,j]:=maxn(maxx[i-2,j-1],maxx[i-1,j-2])+x[i,j];
for i:=1 to m do if maxx[n,i]>k then k:=maxx[n,i];
for i:=1 to n do if maxx[i,m]>k then k:=maxx[i,m];
if k>0 then writeln(k) else writeln(’cannot arrive.’);
end.
给你看看~~