首页 > 代码库 > tyvj 1136

tyvj 1136

[rest] tyvj 1136

 

描述 Description

    作为一个拥有5000年历史的文明古国,中国,孕育了璀璨而辉煌的文明。而太极,就是这灿烂文明中一颗闪耀的明珠。
    太极图体现了传统哲学的思想,中间的阴阳鱼体现了阴中有阳、阳中有阴,阴阳相生的思想。其内涵非常丰富。
    由于素来对传统文化感兴趣,最近又有较多时间,RC开始关注太极的知识了。有一天,RC在一张纸上用墨随意涂鸦。看着那黑白相间的图画,RC突发奇想,要找找这幅画里包含最大的太极图案有多大。
    当然了,我们是不可能找到严格意义上的阴阳鱼的。于是,RC这样定义太极图:找到一个p*(p+1)的矩阵,左上半部分为黑色,右下半部分为白色。也就是一个黑色的等腰直角三角形和一个白色的等腰直角三角形拼接在一起的图案。我们定义等腰直角三角形的边长也就是p为该太极图的尺寸。那么,请你帮忙看看这其中最大的太极图有多大吧!

输入格式 InputFormat

第一行是两个数字n和m,表示图案的大小。
下面为一个n*m的0、1矩阵。0表示白色,1表示黑色。

输出格式 OutputFormat

一个数,表示找到的最大太极图的尺寸。



 

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int f[2000][2000]={0},a[2000][2000];
int n,m,i,j,ans=0;
int main()
{
  scanf("%d%d",&n,&m);
  for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
  {
     scanf("%d",&a[i][j]);
     if((a[i][j]==0)&&(a[i][j-1]==1))f[i][j]=1;
     if((f[i][j-1]==f[i-1][j])&&(a[i-f[i][j-1]][j-f[i][j-1]-1]==1)&&(f[i][j-1]>0))
     f[i][j]=f[i][j-1]+1;
     ans=max(ans,f[i][j]);
  }
  printf("%d\n",ans);
  return 0;
}

tyvj 1136