5655. 重新排列后的最大子矩阵

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;
};

猜你喜欢

转载自blog.csdn.net/yangzijiangac/article/details/112764226