就是简单的DP,讲解一搜网上一大堆
我就不负责点,不说了
例题:盖房子
贴下代码:(pascal)
uses math;
var
a,f:array[-1..1010,-1..1010] of longint;
n,m,i,j:longint;
procedure dp(ni,mi:longint);
var
p,q,ans:longint;
begin
ans:=1;
for p:=2 to ni do
for q:=2 to mi do
if (f[p-1,q-1]>0) then
begin
if (a[p,q]=1) then f[p,q]:=min(f[p-1,q],min(f[p-1,q-1],f[p,q-1]))+1;
if f[p,q]>ans then ans:=f[p,q];
end;
writeln(ans);
end;
begin
readln(n,m);
for i:=1 to n do
for j:=1 to m do
begin
read(a[i,j]);
if a[i,j]=1 then f[i,j]:=1;
end;
dp(n,m);
end.