在二进制矩阵中,将0切换为1以获得由1组成的最大矩形区域。

时间:2015-11-28 16:57:33

标签: algorithm matrix dynamic-programming

有一个非常受欢迎的问题:给定二进制矩阵N * M(仅包含0和1)找到由1组成的最大矩形的区域。它可以使用动态编程轻松解决。我在考虑这个问题的一些变化。如果我们可以将一个0切换为1怎么办?那怎么解决这个问题呢?为了说清楚,有一个例子

  

1 1 0 1 1 0

     

0 1 1 1 0 1

     

1 1 1 0 1 1

     

1 1 1 1 0 1

     

0 1 1 1 1 0

我们可以在第3行,第4列中将一个0切换为1,然后三角形的最大区域为3 * 4 = 12

1 个答案:

答案 0 :(得分:0)

我们有:

solve(matrix): return the largest rectangle consisting of 1's.

然后

for i:1 to n
  for j:1 to m
    if matrix[i][j]==0
      matrix[i][j]=1
      solve(matrix)
      matrix[i][j]=0