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 }
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

更多精彩