Thuật toán bài này của e là dùng QHđ :
B[i,j] la tong cac phan thuong tu [1,1] -> [i,j]
sau đó e tính tổng từ [i-k][j-k] cho tới [i][j] rồi lấy Max
sao mk e làm mãi chỉ đk 0 điểm

(((
Code: |
const fi = '';
fo = '';
var f,g : text;
i,j,k,n : longint;
A,B : array[0..2000,0..2000] of longint;
S,max : qword;
Begin
assign(f,fi);
assign(g,fo);
reset(f);
rewrite(g);
readln(f,n,k);
for i:=1 to n do
for j:=1 to n do
read(f,A[i,j]);
for i:=1 to n do B[i,0]:=0;
for i:=1 to n do B[0,i]:=0;
for i:=1 to n do
for j:=1 to n do
B[i,j]:=B[i-1,j]+B[i,j-1]-B[i-1,j-1]+A[i,j];
max:=0;
for i:=k to n do
for j:=k to n do
Begin
S:=B[i,j]-B[i,j-k]-B[j,i-k]+B[i-k,j-k];
If s >max then max:=s;
end;
writeln(g,max);
close(f);
close(g);
end.
|