1158 全是1的最大子矩陣

2022-08-02 22:39:17 字數 1499 閱讀 8991

1158 全是1的最大子矩陣

基準時間限制:1 秒 空間限制:131072 kb

給出1個m*n的矩陣m1,裡面的元素只有0或1,找出m1的乙個子矩陣m2,m2中的元素只有1,並且m2的面積是最大的。輸出m2的面積。

input

第1行:2個數m,n中間用空格分隔(2 <= m,n <= 500)

第2 - n + 1行:每行m個數,中間用空格分隔,均為0或1。

output

輸出最大全是1的子矩陣的面積。
input示例

3 3

1 1 0

1 1 1

0 1 1

output示例

4

思路:單調棧;

先預處理出每行中連續1的個數,然後看每列,

像這樣用單調棧維護當前點能擴充套件到的最大範圍,然後面積是(r[i]-l[i])*ans[i];

然後更新最大值;複雜度o(n*m);

1 #include2 #include3 #include4 #include

5 #include6 #include7 #include

8 #include9 #include10 #include11

using

namespace

std;

12 typedef long

long

ll;13 typedef struct

node

14 ss;

18 stacksta;

19int a[600][600

];20

int b[600][600

];21

int l[600

];22

int r[600

];23

int main(void)24

35}36 memset(b,0,sizeof

(b));

37for(i = 1; i <= n; i++)

3845

//printf("%d ",b[i][j]);46}

47}48int maxx = 0;49

for(j = 1; j <= m; j++)

5066

else

6774

else

7580}81

}82}83

while(!sta.empty())

8489

for(i = 1; i <= m; i++)

9094

}95 printf("

%d\n

",maxx);96}

97return0;

98 }

51Nod 1158 全是1的最大子矩陣

1158 全是1的最大子矩陣 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 給出1個m n的矩陣m1,裡面的元素只有0或1,找出m1的乙個子矩陣m2,m2中的元素只有1,並且m2的面積是最大的。輸出m2的面積。input 第1行 2個數m,n中間用空格分隔 2 ...

51nod 1158 全是1的最大子矩陣

題目鏈結在這兒 如果我的部落格費解,可以看這篇部落格,認為清晰。首先把子矩陣預處理,g i j 表示第 i j 號元素能向左延伸的長度。進而針對每一列,假設是c列,考慮g i c i 1,row 得到g i c 元素在這一列上作為作為最小值的長度。假設這個區間是 u,d 那麼長度為d u 1,那麼臨...

51nod 1158 全是1的最大子矩陣

題目傳送門 題意 給出1個m n的矩陣m1,裡面的元素只有0或1,找出m1的乙個子矩陣m2,m2中的元素只有1,並且m2的面積是最大的。輸出m2的面積。這道題,是一道十分玄學的題目。在題目上方有兩個標籤 單調棧 和 dp 但實際上,這道題根本就不需要單調棧或是dp。因為我不會,所以我只會玄學 首先,...