算法:DP
分析:跟传纸条是一个题,只不过本题算上了起点和终点,即从起点出发也要算上起点,因此在最后再加上起点和终点位置上的值即可。
program num;
const
maxn=9;
var
n:longint;
a:array [0..maxn,0..maxn] of longint;
f:array [0..maxn,0..maxn,0..maxn,0..maxn] of longint;
procedure init;
var
x,y,v:longint;
begin
readln(n);
readln(x,y,v);
while x+y+v<>0 do
begin
a[x,y]:=v;
readln(x,y,v);
end;
end;
function max(x,y:longint):longint;
begin
if x>y then exit(x) else exit(y);
end;
procedure main;
var
i,j,k,l:longint;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
for k:=1 to n do
begin
for l:=1 to n do
begin
if (i<>k) or (j<>l) then
begin
f[i,j,k,l]:=max(max(f[i-1,j,k-1,l],f[i,j-1,k,l-1]),max(f[i-1,j,k,l-1],f[i,j-1,k-1,l]))+a[i,j]+a[k,l];
end;
end;
end;
end;
end;
end;
begin
assign(input,'num.in'); reset(input);
assign(output,'num.out'); rewrite(output);
init;
main;
writeln(f[n-1,n,n,n-1]+a[1,1]+a[n,n]);
close(input); close(output);
end.