SCU 2096 Maximum Submatrix

来源:互联网 发布:2016淘宝客导购源码 编辑:程序博客网 时间:2024/06/07 21:02

题目链接

题意:找矩阵的全为0的子矩阵,使其最大。

分析:dp[i][j]表示在第i行以mat[i][j]=0结尾的连续0的数量。若mat[i][j]=1,dp[i][j]=0。然后对列扫一遍看对应行数最多多少。

#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 105using namespace std;int dp[MAX_N][MAX_N];int mat[MAX_N][MAX_N];int main(void){    int t;    scanf("%d",&t);    while(t--)    {        int n,m;        scanf("%d%d",&n,&m);        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)            {                scanf("%d",&mat[i][j]);                dp[i][j]=0;            }        }        for(int i=0;i<n;i++)        {            int cnt=0;            for(int j=0;j<m;j++)            {                if(mat[i][j]==1)                {                    dp[i][j]=0;                    cnt=0;                }                else                {                    cnt++;                    dp[i][j]=cnt;                }            }        }        int ans=0;        for(int k=0;k<m;k++)        {            for(int j=k;j<m;j++)            {                int len=j-k+1;                int cnt=0;                int res=0;                for(int i=0;i<n;i++)                {                    if(dp[i][j]>=len)                    cnt++;                    else                    cnt=0;                    res=max(res,cnt*len);                }                ans=max(ans,res);            }        }        printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击