codevs天梯 最大全0子矩阵

本文介绍了一种寻找二维01矩阵中最大全0子矩阵的算法,通过统计前缀和并进行纵向累加实现。重点在于更新每列的高度、左侧边界及右侧边界,并计算以当前行为底的最大矩形面积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一个0,1方阵中找出其中最大的全0子矩阵,所谓最大是指O的个数最多。

分析:说是一道动规题,其实完全不算,就是先统计前缀和,然后纵行统计。

uses math;


const n=2010;


var


 inn,ans,i,j,lo,ro:longint;


 h,l,r:array[0..n] of longint;


 o:array[0..n,0..n] of longint;


begin


 ans:=0;


 readln(inn);


 for i:=1 to inn do


  for j:=1 to inn do


   read(o[i,j]);


 for i:=1 to inn do begin


  h[i]:=0;


  l[i]:=1;


  r[i]:=inn;


 end;


 for i:=1 to inn do  begin


  lo:=0;ro:=inn+1;


  for j:=1 to inn do


   if o[i,j]=1 then begin


    h[j]:=0;


    l[j]:=1;


    lo:=j;


   end else begin


    inc(h[j]);


    l[j]:=max(l[j],lo+1);


   end;


  for j:=inn downto 1 do


   if o[i,j]=1 then begin


    r[j]:=inn;


    ro:=j;


   end else begin


    r[j]:=min(r[j],ro-1);


    ans:=max(ans,h[j]*(r[j]-l[j]+1));


   end;


  end;


  writeln(ans);


end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值