http://icpc.upc.edu.cn/problem.php?cid=1403&pid=6
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,i,j,a[100][100],f[100][100],ans,d[4][2]= {{0,1},{1,0},{-1,0},{0,-1}};
int dfs(int x,int y) {
if (f[x][y]) return f[x][y];
int t=1;
for (int i=0; i<4; i++) {
int x1=x+d[i][0],y1=y+d[i][1];
if (x1>=1&&x1<=n&&y1>=1&&y1<=m&&a[x][y]<a[x1][y1]) {
t=max(t,dfs(x1,y1)+1);
}
}
f[x][y]=t;
return t;
}
int main() {
scanf("%d%d",&n,&m);
for (i=1; i<=n; i++)
for (j=1; j<=m; j++) {
scanf("%d",&a[i][j]);
}
for (i=1; i<=n; i++)
for (j=1; j<=m; j++) {
f[i][j]=dfs(i,j);
ans=max(ans,f[i][j]);
}
printf("%d\n",ans);
}