给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列。
请你返回最优方案下将 matrix 重新排列后,全是 1 的子矩阵面积。
输入:matrix = [[0,0,1],[1,1,1],[1,0,1]]
输出:4
解释:你可以按照上图方式重新排列矩阵的每一列。
最大的全 1 子矩阵是上图中加粗的部分,面积为 4 。
from typing import *
import sys
class Solution:
def numSubmat(self, mat: List[List[int]]) -> int:
if len(mat) == 0 or len(mat[0]) == 0:
return 0
m, n = len(mat), len(mat[0])
dp = [[0] * n for _ in range(m)]
res = 0
for i in range(m):
for j in range(n):
if j == 0:
dp[i][j] = mat[i][j]
elif mat[i][j] != 0:
dp[i][j] = dp[i][j - 1] + 1
for i in range(m):
for j in range(n):
val = sys.maxsize
if dp[i][j] > 0:
for k in range(i, -1, -1):
val = min(val, dp[k][j])
res += val
return res