【codevs1159】最大全0子矩阵(悬线法)

来源:互联网 发布:tcpip网络层安全协议 编辑:程序博客网 时间:2024/06/04 18:55

题目链接:传送门
题解:
方法二见【WC2002】奶牛浴场
悬线法求极大子矩阵,复杂度O(n2)
讲解戳这里

//by sdfzchy#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>const int N=2005;using namespace std;typedef long long LL;int n;int h[N],l[N],r[N],ans;bool a[N][N];int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)            scanf("%d",&a[i][j]);    memset(r,0x3f,sizeof(r));    for(int i=1;i<=n;i++)    {        int L=1,R=n;        for(int j=1;j<=n;j++)            if(a[i][j])            {                L=j+1;                h[j]=l[j]=0;            }            else            {                h[j]++;                l[j]=max(l[j],L);            }           for(int j=n;j>=1;j--)            if(a[i][j])            {                R=j-1;                r[j]=n;            }            else            {                r[j]=min(r[j],R);                ans=max(ans,(r[j]-l[j]+1)*h[j]);            }       }    printf("%d\n",ans);    return 0;}
原创粉丝点击