📄 p1143.pas
字号:
program ss;
const
d:array[0..2] of byte=(0,1,0);
MAXN=20;
var
map:array[1..MAXN,1..MAXN] of word;
f0,f1:array[1..MAXN,1..MAXN,1..MAXN] of word;
val,x1,y1,x2,y2,x3,y3,xx1,yy1,xx2,yy2,xx3,yy3:word;
n,x,y,i,d1,d2,d3:byte;
t:word;
function bound(x,y:byte):boolean;
begin
if ((x>=1)and(x<=n)) and ((y>=1)and(y<=n)) then
bound:=true
else
bound:=false;
end;
function max(a,b:word):word;
begin
if a>=b then max:=a
else max:=b;
end;
begin
readln(n);
for x:=1 to n do begin
for y:=1 to n do
read(map[x,y]);
readln;
end;
{readln(x,y,val);
while (x<>0)or(y<>0)or(val<>0) do
begin
map[x,y]:=val;
readln(x,y,val);
end;}
fillchar(f0,sizeof(f0),0);
f0[1,1,1]:=map[1,1];
for i:=2 to n+n-1 do begin
fillchar(f1,sizeof(f1),0);
for x1:=1 to i-1 do begin
for x2:=1 to i-1 do begin
for x3:=1 to i-1 do begin
y1:=i-x1; y2:=i-x2; y3:=i-x3;
if bound(x1,y1) and bound(x2,y2) and bound(x3,y3) then begin
for d1:=0 to 1 do begin
for d2:=0 to 1 do begin
for d3:=0 to 1 do begin
{d1:(x1,y1)->(xx1,yy1);
d2:(x2,y2)->(xx2,yy2);}
xx1:=x1+d[d1]; yy1:=y1+d[d1+1];
xx2:=x2+d[d2]; yy2:=y2+d[d2+1];
xx3:=x3+d[d3]; yy3:=y3+d[d3+1];
if(bound(xx1,yy1) and bound(xx2,yy2) and bound(xx3,yy3))
{and (not((d1=d2) and (d2=d3)) or not((x1=x2) and (x2=x3)))} then begin
if (xx1=xx2) and (xx2=xx3) then t:=f0[x1,x2,x3]+map[xx1,yy1]
else if xx1=xx2 then t:=f0[x1,x2,x3]+map[xx1,yy1]+map[xx3,yy3]
else if xx1=xx3 then t:=f0[x1,x2,x3]+map[xx1,yy1]+map[xx2,yy2]
else if xx2=xx3 then t:=f0[x1,x2,x3]+map[xx1,yy1]+map[xx2,yy2]
else t:=f0[x1,x2,x3]+map[xx1,yy1]+map[xx2,yy2]+map[xx3,yy3];
if t>f1[xx1,xx2,xx3] then f1[xx1,xx2,xx3]:=t;
end;
{t1:=0; t2:=0;
if (bound(xx1,yy1) and bound(xx2,yy2)) bound(xx3,yy3) and ((d1<>d2) or (xx1<>xx2)) then begin
if xx1=xx2 then t1:=f0[x1,x2]+map[xx1,yy1]
else t2:=f0[x1,x2]+map[xx1,yy1]+map[xx2,yy2];
if max(t1,t2)>f1[xx1,xx2] then f1[xx1,xx2]:=max(t1,t2);
end;}
end;
end;
end;
end;
end;
end;
end;
f0:=f1;
end;
writeln(f0[n,n,n]);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -