典型动态规划,求最大子矩阵和,其实是最长子段和的变形,设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.