1 #include<iostream>
2 using namespace std;
3 int Edge[105][105];
4 int E[105][105];
5 int dir[4][2]={{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
6 int Max, ma;
7 int r ,c;
8 bool ok( int a, int b )
9 {
10 if( a<0||a>=r||b<0||b>=c )return false;
11 else return true;
12 }
13 void dfs( int a, int b, int cur )
14 {
15 if( E[a][b]>0 )ma=max( ma, cur+E[a][b]-1 );
16 else
17 {
18 int fla=0;
19 for( int i=0; i<4; i++ )
20 {
21 int a1=a+dir[i][0];
22 int b1=b+dir[i][1];
23 if( ok(a1, b1)&&Edge[a1][b1]<Edge[a][b] )
24 {
25 dfs( a1, b1, cur+1 );
26 fla=1;
27 }
28 }
29 if( fla==0&&ma<cur )ma=cur;
30 }
31 }
32 int main()
33 {
34
35 int i, j;
36 cin >> r >> c;
37 for( i=0; i<r; i++ )
38 for( j=0; j<c; j++ )
39 {
40 cin >> Edge[i][j];
41 E[i][j]=0;
42 }
43 for( i=0; i<r; i++ )
44 {
45 for( j=0; j<c; j++ )
46 {
47 ma=0;
48 dfs( i, j, 1 );
49 E[i][j]=ma;
50 if(Max<ma)
51 Max=ma;
52 }
53 }
54 cout<<Max<<endl;
55 return 0;
56 }