悬线法求最大矩形

编程入门 行业动态 更新时间:2024-10-10 12:22:48

悬线法求最大<a href=https://www.elefans.com/category/jswz/34/1759498.html style=矩形"/>

悬线法求最大矩形

悬线法

一 定义

​ 悬线的定义,就是一条竖线,这条竖线要满足上端点在整个矩形上边界或者是一个障碍点。然后以这条悬线进行左右移动,直到移至障碍点或者是矩阵边界,进而确定这条悬线所在的极大矩阵。

二 悬线法的使用

​ 首先我们要得到一个r数组和一个l数组,记录这个点的左边可到达点和这个点的右边可到达点。在用up数组得到这个点的向上最大高度,从而得到最终的解。

三 code

初始化

  for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++)map[i][j] = input(),up[i][j] = 1,r[i][j] = l[i][j] = j;

得到我们的l和r数组

for(int i = 1;i <= n;i++)for(int j = 2;j <= m;j++){if(map[i][j]&&map[i][j-1])l[i][j] = l[i][j-1];}for(int i = 1;i <= n;i++)for(int j = m-1;j >= 1;j--){if(map[i][j]&&map[i][j+1])r[i][j] = r[i][j+1];}

得到up数组并更新答案

for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(i>1&&map[i][j]==1&&map[i-1][j]==1){r[i][j]=min(r[i][j],r[i-1][j]);l[i][j]=max(l[i][j],l[i-1][j]);up[i][j]=up[i-1][j]+1;}ans=max(ans,(r[i][j]-l[i][j]+1)*up[i][j]);}}

更多推荐

悬线法求最大矩形

本文发布于:2024-02-25 03:47:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1697677.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:矩形   悬线法求

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!