简单题一道,主要还是考虑边界上的点
#include <stdio.h>
#define M 200
int a[M][M];
int c[M][M];
int R,C;
void solve(int m,int n)
{
int i,b[4],temp;
if(m==0||a[m][n]<=a[m-1][n])
b[0]=0;
else
{
if(c[m-1][n]==-1)
solve(m-1,n);
b[0]=c[m-1][n]+1;
}
if(n==C-1||a[m][n]<=a[m][n+1])
b[1]=0;
else
{
if(c[m][n+1]==-1)
solve(m,n+1);
b[1]=1+c[m][n+1];
}
if(m==R-1||a[m][n]<=a[m+1][n])
b[2]=0;
else
{
if(c[m+1][n]==-1)
solve(m+1,n);
b[2]=1+c[m+1][n];
}
if(n==0||a[m][n]<=a[m][n-1])
b[3]=0;
else
{
if(c[m][n-1]==-1)
solve(m,n-1);
b[3]=1+c[m][n-1];
}
temp=0;
for(i=0;i<4;i++)
{
if(temp<b[i])
temp=b[i];
}
c[m][n]=temp;
}
int main()
{
int i,j,Max_h=0;
scanf("%d%d",&R,&C);
for(i=0;i<R;i++)
for(j=0;j<C;j++)
scanf("%d",&a[i][j]);
memset(c,-1,sizeof(c));
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
if(c[i][j]==-1)
solve(i,j);
}
}
for(i=0;i<R;i++)
for(j=0;j<C;j++)
if(Max_h<c[i][j])
Max_h=c[i][j];
printf("%d\n",Max_h+1);
return 0;
}