5655. 重新排列后的最大子矩阵
难度中等18
给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列。
请你返回最优方案下将 matrix 重新排列后,全是 1 的子矩阵面积。
输入:matrix = [[0,0,1],[1,1,1],[1,0,1]]
输出:4
解释:你可以按照上图方式重新排列矩阵的每一列。
最大的全 1 子矩阵是上图中加粗的部分,面积为 4 。
思路:
设dp[i][j]代表第i列1→j有连续1的个数是多少,然后对当前列排序后,计算答案,枚举最大值。
class Solution {
public:
int largestSubmatrix(vector<vector<int>>& matrix) {
n=matrix.size();
m=matrix[0].size();
int dp[m+1];
int pre[m+1];
memset(dp,0,sizeof dp);
memset(pre,0,sizeof pre);
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(matrix[i-1][j-1]==0)
dp[j]=0;
else
dp[j]=dp[j]+1;
pre[j]=dp[j];
}
sort(pre+1,pre+1+m);
for(int j=m;j>=1;j--)
{
ans=max(pre[j]*(m-j+1),ans);
}
}
return ans;
}
private:
int n;
int m;
};