• 118.最大全0子矩阵


    1159 最大全0子矩阵

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
    题目描述 Description

    在一个0,1方阵中找出其中最大的全0子矩阵,所谓最大是指O的个数最多。

    输入描述 Input Description

    输入文件第一行为整数N,其中1<=N<=2000,为方阵的大小,紧接着N行每行均有N个0或1,相邻两数间严格用一个空格隔开。

    输出描述 Output Description

    输出文件仅一行包含一个整数表示要求的最大的全零子矩阵中零的个数。

    样例输入 Sample Input

    5
    0 1 0 1 0
    0 0 0 0 0
    0 0 0 0 1
    1 0 0 0 0
    0 1 0 0 0

    样例输出 Sample Output

    9

    数据范围及提示 Data Size & Hint

    分类标签 Tags 点此展开 

    代码:
    #include< ostream >
    #include< cstdio >
    using namespace std;
    #define INF 2001
    int f[INF][INF],n,h[INF],l[INF],r[INF];
    void input()
    {
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
      for(int j=1;j<=n;++j)
      {
       scanf("%d",&f[i][j]);//f数组存矩阵 
      }
    int ma=0;//储存最大值 
    for(int i=1;i<=n;++i)
    {
    for(int j=1;j<=n;++j)
    {
    if(!f[i][j])
    h[j]++;//h[]是滚动数组,记录第i行第j列的最大高度 
    else h[j]=0;//如果不是0,那么高度就是0
    }
    for(int j=1;j<=n;++j)
    {
    l[j]=j;
    while(l[j]>1&&h[j]<=h[l[j]-1]) 
    l[j]=l[l[j]-1];
    }
    for(int j=n;j>=1;--j)
    {
    r[j]=j; 
    while(r[j]<=h[r[j]+1])
    r[j]=r[r[j]+1];
    }
    for(int j=1;j<=n;++j)//记录这一行的最大值 
    if(ma
    ma=h[j]*(r[j]-l[j]+1);
    }
    printf("%d ",ma);
    }
    int main()
    {
    input();
    return 0;
    }

  • 相关阅读:
    c#新语法
    关于js 原生原生链
    网站置灰
    ie时间格式NAN-NAN-NAN
    关于vue+element对ie9的兼容el-upload不支持在IE9上传
    屏幕录制+网页页面截图
    javascript -数组常用方法
    javascript -字符串常用方法
    JavaScript 实用技巧
    vue兼容ie
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5370696.html
Copyright © 2020-2023  润新知