http://poj.org/problem?id=1088
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int hs,ls;
int hei[105][105];
int len[105][105];
int ans;
void init(){
memset(hei,INF,sizeof(hei));
memset(len,0,sizeof(len));
ans=-1;
}
int nx[4]={0,0,1,-1};
int ny[4]={1,-1,0,0};
int dp(int h,int l){
if(len[h][l]>0){
return len[h][l];
}
len[h][l]=1;
int nh,nl;
for(int i=0;i<4;i++){
nh=h+nx[i];
nl=l+ny[i];
if(nh>=1&&nh<=hs&&nl>=1&&nl<=ls)
if(hei[h][l]>hei[nh][nl]){
len[h][l]=max(len[h][l],dp(nh,nl)+1);
}
}
return len[h][l];
}
void work(){
for(int i=1;i<=hs;i++){
for(int j=1;j<=ls;j++){
ans=max(ans,dp(i,j));
}
}
printf("%d\n",ans);
}
void read(){
while(scanf("%d%d",&hs,&ls)!=EOF){
init();
for(int i=1;i<=hs;i++){
for(int j=1;j<=ls;j++){
scanf("%d",&hei[i][j]);
}
}
work();
}
}
int main(){
read();
return 0;
}