记忆化搜索
#include <stdio.h>
int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int a[501][501];
int f[501][501];
int v[501][501];
int r,c,fst;
long ans;
void
init()
{
freopen("hx.in","r",stdin);
scanf("%d%d",&r,&c);
int i,j;
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
f[i][j]=1;
scanf("%d",&a[i][j]);
}
}
void
dfs(int x,int y)
{
int i;
for(i=0;i<=3;i++)
{
if( a[x+way[i][0]][y+way[i][1]] < a[x][y])
{
if(!v[x+way[i][0]][y+way[i][1]])
{
v[x+way[i][0]][y+way[i][1]]=1;
dfs(x+way[i][0],y+way[i][1]);
}
if(f[x+way[i][0]][y+way[i][1]] + 1 > f[x][y])
{
f[x][y] = f[x+way[i][0]][y+way[i][1]] + 1;
fst=1;
if(ans < f[x][y])
ans = f[x][y];
}
}
}
}
void
doit()
{
int i,j;
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
dfs(i,j);
}
int
main()
{
freopen("hx.out","w",stdout);
init();
doit();
fst ? printf("%ld\n",ans) : printf("1\n");
return 0;
}
PS:开数组要开大些。。。