1 #include <stdio.h>
2 #include <string.h>
3 #include <algorithm>
4 #define MAX_N 105
5 using namespace std;
6 int len[MAX_N][MAX_N],A[MAX_N][MAX_N];
7 int d[4][2]= {{-1,0},{0,1},{1,0},{0,-1}}; //左 下 右 上
8 int R,C;
9 int Dp(int i,int j)
10 {
11 if(len[i][j]!=0)return len[i][j];
12 int Max=0,s;
13 for(int t=0; t<4; t++)
14 {
15 int x1=i+d[t][0],y1=j+d[t][1]; //四个方向变换后的x y值
16 if(x1>=0&&x1<R&&y1>=0&&y1<C&&A[x1][y1]<A[i][j])
17 {
18 s=Dp(x1,y1);
19 if(s>Max)Max=s;
20 }
21
22 }
23 return Max+1;
24 }
25
26 int main()
27 {
28 while(scanf("%d%d",&R,&C)!=EOF)
29 {
30 int Mx=-1;
31 memset(len,0,sizeof(len));
32 for(int i=0; i<R; i++)
33 for(int j=0; j<C; j++)
34 scanf("%d",&A[i][j]);
35 for(int i=0; i<R; i++)
36 for(int j=0; j<C; j++)
37 {
38 len[i][j]=Dp(i,j);
39 if(len[i][j]>Mx)Mx=len[i][j];
40 }
41 printf("%d\n",Mx);
42 }
43
44 }