#P16414. 二维取反机
二维取反机
二维取反机
题目背景
工程师正在调试一台能够对二进制矩阵进行整片取反的机器。机器只能从矩阵的四个方向选择一段完整的行或列进行操作。现在需要从一张较大的矩阵中截取一块连续区域,使这块区域能够被机器完全清零。
题目描述
一个二进制矩阵的每个元素都是 0 或 1。
对于一个具有 行、 列的二进制矩阵,二维取反机支持以下四类操作。矩阵的行编号为 ,列编号为 。
N i:将第 行至第 行中的所有元素取反;S i:将第 行至第 行中的所有元素取反;W j:将第 列至第 列中的所有元素取反;E j:将第 列至第 列中的所有元素取反。
其中,取反表示将 0 变为 1,将 1 变为 0。
如果经过有限次操作后,可以使矩阵中的所有元素均变为 0,则称这个矩阵是可擦除的。
原矩阵的一个连续子矩阵由若干连续的行和若干连续的列交叉形成,且至少包含一行和一列。选择全部行或全部列也是允许的。
给定一个二进制矩阵,请求出其中面积最大的可擦除连续子矩阵,并输出其包含的元素数量。
对于选出的连续子矩阵,应将它视为一张独立矩阵,并在这张子矩阵上执行上述操作。
输入格式
第一行包含两个整数 ,分别表示矩阵的行数和列数。
接下来 行,每行包含一个长度为 的二进制字符串,描述矩阵的一行。
输出格式
输出一个整数,表示面积最大的可擦除连续子矩阵所包含的元素数量。
样例
样例输入 #1
4 4
0011
0011
1100
0111
样例输出 #1
12
样例输入 #2
4 4
0011
1011
0101
1010
样例输出 #2
9
样例输入 #3
4 4
1011
0011
0101
1010
样例输出 #3
8
样例输入 #4
3 13
0000110101010
0111101010111
1110110111011
样例输出 #4
13
样例输入 #5
20 20
11000000000110101101
00111111011101101101
00110011110111100010
10011110111110000111
00111010000000110111
00001101011011010110
11010010100100101100
11101101011011000001
11000010100100111001
11011010100100101010
10110010100100110110
01100010100100111001
10110010100100110011
01110101011011001010
01111101011011001011
00001000010010101011
11100101100100110001
10100100111001010101
11111000001010011110
01110100001110011111
样例输出 #5
100
样例输入 #6
6 4
0111
1101
1001
0001
1101
1111
样例输出 #6
8
样例输入 #7
1 1
0
样例输出 #7
1
样例说明
在样例 1 中,整个 矩阵无法被完全擦除,但由最上方三行和全部四列组成的 连续子矩阵可以被擦除。
一种操作过程如下:
0011 1100 0000
0011 -N 1-> 1100 -W 1-> 0000
1100 1100 0000
因此最大面积为 。
在样例 5 中,第 行至第 行、第 列至第 列组成的 连续子矩阵可擦除,因此答案为 。这里的行列编号从 开始。
数据范围
- ;
- 输入矩阵中的字符仅可能为
0或1。