C11ROOKS - Hai quân xe
Tác giả: ladpro98
Ngôn ngữ: Pascal
program c11rooks;
uses math;
const maxn=303;
fi='';
var a:array[1..maxn,1..maxn] of longint;
row,col,s1,s2:array[1..maxn] of longint;
n,res:longint;
procedure input;
var inp:text;
i,j:longint;
begin
assign(inp,fi);
reset(inp);
readln(inp,n);
for i:=1 to n do
begin
for j:=1 to n do read(inp,a[i,j]);
readln(inp);
end;
close(inp);
end;
procedure init;
var i,j:longint;
begin
res:=low(longint);
for i:=1 to n do
begin
row[i]:=0;
for j:=1 to n do
inc(row[i],a[i,j]);
end;
for j:=1 to n do
begin
col[j]:=0;
for i:=1 to n do
inc(col[j],a[i,j]);
end;
end;
procedure process;
var i,j,k,t,max1,max2:longint;
begin
for i:=1 to n do
begin
for k:=1 to n-1 do
for j:=k+1 to n do
res:=max(res,row[i]+col[k]+col[j]-2*a[i,k]-2*a[i,j]);
for j:=i+1 to n do
begin
t:=row[i]+row[j];
for k:=1 to n do
begin
res:=max(res,t+col[k]-2*a[i,k]-2*a[j,k]);
s1[k]:=col[k]-2*a[i,k]-a[j,k];
s2[k]:=col[k]-a[i,k]-2*a[j,k];
end;
max1:=s1[1];max2:=s2[1];
for k:=2 to n do
begin
res:=max(res,t+s2[k]+max1);
res:=max(res,t+s1[k]+max2);
max1:=max(max1,s1[k]);
max2:=max(max2,s2[k]);
end;
end;
end;
end;
begin
input;
init;
process;
write(res);
end.