T2:
题解:
通过暴力枚举我们可以发现,可吃草的范围是以菱形领域扩张的,
由此,我们可枚举每个点,并以这个点为牛所在位置,通过前缀和算出改点领域内草的和
并求出领域内草的和最大的那个点
参考程序:
var n,k,i,j,t,t2,ans,sum:longint;
a:array[-500..500,-500..800]of longint;
s:array[-500..500,-500..800]of longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x) else exit(y);
end;
function min(x,y:longint):longint;
begin
if x<y then exit(x) else exit(y);
end;
begin
readln(n,k);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(a[i,j]);
s[i,j]:=s[i,j-1]+a[i,j];
end;
for j:=n+1 to n+n do s[i,j]:=s[i,j-1];
end;
if k>=n then
begin
for i:=1 to n do ans:=ans+s[i,n];
writeln(ans);
exit;
end;
for i:=1 to n do
for j:=1 to n do
begin
sum:=0;
t2:=0;
if i-k<1 then t2:=1-(i-k);
for t:=max(i-k,1) to i do
begin
inc(t2);
sum:=sum+s[t,j+t2-1]-s[t,j-t2];
end;
for t:=i+1 to min(i+k,n) do
begin
dec(t2);
sum:=sum+s[t,j+t2-1]-s[t,j-t2];
end;
if sum>ans then ans:=sum;
end;
writeln(ans);
end.