简单的记忆化搜索。很早以前做的,代码风格很乱。将就一下啦。
#include <stdio.h>
#include <string.h>

const int dx[]=
{-1,0,1,0},dy[]=
{0,1,0,-1};
int a[100][100],f[100][100],n,m,i,j,max;

int ok(int x,int y)
{
return (x>=0 && x<n && y>=0 && y<m);
}

int h(int x,int y)
{
int i;
if (f[x][y]>0) return f[x][y];
for (i=0;i<4;i++) if (ok(x+dx[i],y+dy[i]) && a[x+dx[i]][y+dy[i]]<a[x][y]) f[x][y]>?=h(x+dx[i],y+dy[i])+1;
return f[x][y];
}

int main()
{
for (scanf("%d%d",&n,&m),memset(f,0,sizeof(f)),i=0;i<n;i++) for (j=0;j<m;j++) scanf("%d",&a[i][j]);
for (max=0,i=0;i<n;i++) for (j=0;j<m;j++) max>?=h(i,j);
printf("%d\n",max+1);
return 0;
}