var f:array[1..51,1..51,1..51,1..51]of longint;
a,s:array[0..55,0..55]of longint;
i,j,n,m:longint;
function min(a,b:longint):longint;
begin
if a<b then min:=a
else min:=b;
end;
function dp(x1,y1,x2,y2:longint):longint;
var i,tmp,x:longint;
begin
if f[x1,y1,x2,y2]<>-1 then exit(f[x1,y1,x2,y2]);
tmp:=maxlongint;
for i:=x1 to x2-1 do
tmp:=min(tmp,dp(x1,y1,i,y2)+dp(i+1,y1,x2,y2));
for i:=y1 to y2-1 do
tmp:=min(tmp,dp(x1,y1,x2,i)+dp(x1,i+1,x2,y2));
f[x1,y1,x2,y2]:=tmp+s[x2,y2]-s[x2,y1-1]-s[x1-1,y2]+s[x1-1,y1-1];
exit(f[x1,y1,x2,y2]);
end;
begin
read(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
fillchar(s,sizeof(s),0);
for i:=1 to n do
for j:=1 to m do
s[i,j]:=s[i-1,j]+s[i,j-1]-s[i-1,j-1]+a[i,j];
fillchar(f,sizeof(f),$ff);
for i:=1 to n do
for j:=1 to m do
f[i,j,i,j]:=0;
writeln(dp(1,1,n,m));
end.
有什么不对吗?
那位神牛只一下,为什么86分?
一个点超时,两个错了。
难道有优化?还是有什么要注意的?
神牛们,帮帮弱菜吧。