Problem:
Largest Square

Given a matrix (H × W) which contains only 1 and 0, find the area of the largest square matrix which only contains 0s.

Input

H W
c1,1 c1,2 ... c1,W
c2,1 c2,2 ... c2,W
:
cH,1 cH,2 ... cH,W

In the first line, two integers H and W separated by a space character are given. In the following H lines, ci,j, elements of the H × W matrix, are given.

Output

Print the area (the number of 0s) of the largest square.

Constraints

1 ≤ H, W ≤ 1,400

Sample Input

4 5
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
0 0 0 1 0

Sample Output

4

Solution in C (judge verdict: Accepted)

#include <stdio.h>
#define MAX 1400
int H,W;

int C[MAX][MAX];
int dp[MAX][MAX];
int min(int a,int b){
  if(a<b)return a;
  else return b;
}
int max(int a,int b){
  if(a<b)return b;
  else return a;
}
int largest(){
  int i,j;
  int maxwidth=0;
  for(i=0;i<H;i++){
    for(j=0;j<W;j++){
      dp[i][j]=(C[i][j]+1)%2;
      maxwidth|=dp[i][j];
    }
  }
  for(i=1;i<H;i++){
    for(j=1;j<W;j++){
      if(C[i][j])dp[i][j]=0;
      else{
	dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;
	maxwidth=max(maxwidth,dp[i][j]);
      }
    }
  }
  return maxwidth*maxwidth;
}
int main(){
  int i,j;
  scanf("%d %d",&H,&W);
  for(i=0;i<H;i++){
    for(j=0;j<W;j++){
      scanf("%d",&C[i][j]);
    }
  }
  printf("%d\n",largest());
  return 0;
}