zoukankan      html  css  js  c++  java
  • JZOJ 2548. 【NOIP2011模拟9.4】最大正方形

    题目

    Description

      给一个N*N的01矩阵, 求一个面积最大的全为1的正方形子矩阵. 输出它的面积.
     

    Input

      输入文件square.in的第一行包含一个正整数N.
      接下来N行, 每行N个数, 保证不是0就是1. 每行相邻两个数之间没有空格.

    Output

      输出文件为square.out,仅包含一个整数表示最大的全1子正方形矩阵的面积。
     

    Sample Input

    2
    11
    11

    Sample Output

    4
     

    Data Constraint

     
     

    Hint

    【数据规模和约定】
      80%的数据中 N<=250;
      100%的数据中 N <= 1000。

     

    分析

           

              矩阵前缀和

     

    代码

     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 int map[1001][1001],sum[1001][1001];
     5 int ans;
     6 int main ()
     7 {
     8     int n;
     9     char c;
    10     cin>>n;
    11     for (int i=1;i<=n;i++)
    12         for (int j=1;j<=n;j++)
    13         {
    14             cin>>c;
    15             map[i][j]=c-'0';
    16         }
    17     for (int i=1;i<=n;i++)
    18         for (int j=1;j<=n;j++)
    19           sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+map[i][j];
    20     for (int i=1;i<=n;i++)
    21     {
    22         for (int j=1;j<=n;j++)
    23         {
    24             for (int k=sqrt(ans);i+k-1<=n&&j+k-1<=n;k++)
    25             {
    26                 if (sum[i+k-1][j+k-1]-sum[i+k-1][j-1]-sum[i-1][j+k-1]+sum[i-1][j-1]==k*k)
    27                   ans=max(k*k,ans);
    28                 else break;
    29             }
    30         }
    31     } 
    32       cout<<ans;
    33 }

     

    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    树形地铁系统[树的最小表示]
    156. 矩阵[二维的hash]
    兔子与兔子
    滑动窗口【单调队列入门题】
    【YBTOJ】生日相同
    【YBTOJ】移位包含
    【YBTOJ】【HDUOJ 3085】逃离噩梦
    【YBTOJ】立体推箱子
    【CodeForces 1408F】Two Different
    【Luogu P3338】[ZJOI2014]力
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10698904.html
Copyright © 2011-2022 走看看