简单的记忆化搜索。很早以前做的,代码风格很乱。将就一下啦。
#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;
}