讨论 / 按145题,只要玫举长度K
lizhixin 2010-05-13 06:31:00
点我顶贴 收藏 删除
program p106;

var s:array[0..101,0..101]of longint;

f:array[0..101]of longint;

n,i,j,k,t,max,oo:longint;

begin

max:=-1000000;

readln(n);

for i:=1 to n do

for j:=1 to n do

begin

read(oo);

s[i,j]:=s[i-1,j]+s[i,j-1]-s[i-1,j-1]+oo;

end;

for k:=1 to n do

for i:=1 to n-k+1 do

begin

t:=0;

for j:=1 to n do

begin

f[j]:=f[j-1]+s[i+k-1,j]-s[i+k-1,j-1]-s[i-1,j]+s[i-1,j-1];

if f[j]-f[t]>max then max:=f[j]-f[t];

if f[j]-f[t]<=0 then t:=j;

end;

end;

if max<0 then max:=0;

writeln(max);

end.

#1 aaa741852h@2010-05-13 06:31:00
回复 删除
这个为什么不行

program p106;

var i,j,k,n,max,now:longint;

e:array[0..100,0..100]of longint;

begin

readln(n);

for i:=1 to n do

for j:=1 to n do

begin

read(k);

e[i,j]:=e[i-1,j] + e[i,j-1] - e[i-1,j-1]+k;

end;

max:=-100000;

for k:=1 to n do

begin

now:=0;

for i:=1 to n-k+1 do

for j:=1 to n do

begin

inc(now,e[i+k-1,j]-e[i+k-1,j-1]-e[i-1,j]+e[i-1,j-1]);

if now>max then max:=now;

if now<=0 then

now:=0;

end;

end;

if max<0 then writeln(0)

else writeln(max);

end.

查看更多回复
提交回复