#include<iostream>
using namespace std;
int RetRes(int ,int ,int );
int **p=NULL;
int main(int argc,char* argv[])
{
int i,j,res=0,res_l=0;
int a,b;
cin>>a>>b;
p=new int*[a];
for(i=0;i<a;i++)
p[i]=new int[b];
for(i=0;i<a;i++)
for(j=0;j<b;j++)
scanf("%d",&p[i][j]);
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
res=RetRes(i,j,a>b?b:a);
if(res>res_l)
res_l=res;
}
cout<<res_l<<endl;
for(i=0;i<b;i++)
delete p[i];
delete []p;
return 0;
}
int RetRes(int m,int n,int min)
{
int i,j,k,res=0,l,h;
l=m; h=n;
for(k=1;k<=min;k++)
{
if(p[m][n]!=0)
return res;
else if(k==1)
res=1;
for(i=h;i<=n;i++)
if(p[m][i]!=0)
return res;
for(j=l;j<=m;j++)
if(p[j][n]!=0)
return res;
res=(i-h)>res?(i-h):res;
if(m+1<min && n+1<min)
{
m+=1;
n+=1;
}
else
return res;
}
// return res;
}
明显的是 这个程序写的时间复杂度大了,程序超时了,因为这种是最笨的方法了--枚举,依次检测
哎,做ACM题不是为了竞赛主要是为了防止自己在闲下来的时候有事做,可以慢慢研究了!关于这道题的简洁算法,希望大侠路过可以指导下!
感觉是这道题与矩阵有点关系,但是始终没找到方法.....