典型动态规划,求最大子矩阵和,其实是最长子段和的变形,设f[i,j,k]表示从第i到j行第k列的和
program poj1050;
var
a:array[1..100,1..100] of integer;
f:array[0..100,0..100,0..100] of integer;
n,i,j,x,k:integer;
ans,s:longint;
begin
readln(n);
x:=1;
for i:=1 to n*n do
begin
read(k);
if i mod n=0 then
begin
a[x,n]:=k;
inc(x);
end
else a[x,i mod n]:=k;
end;
ans:=-maxint;
for i:=1 to n do
for j:=i to n do
begin
s:=0;
for k:=1 to n do
begin
f[i,j,k]:=f[i,j-1,k]+a[j,k];
if s>0 then s:=s+f[i,j,k]
else s:=f[i,j,k];
if s>ans then ans:=s;
end;
end;
writeln(ans);
end.