1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4 int data[200][200],ans[200][200];
5 int h,l,answ;
6 int find(int i,int j)
7 {
8 int max1,max2;
9 int max_up=0,max_down=0,max_left=0,max_right=0;//注意要负初值
10 if(ans[i][j]>0) return ans[i][j];
11 if(i-1>=1&&data[i][j]>data[i-1][j])
12 max_up=find(i-1,j);//up
13 if(i+1<=h&&data[i][j]>data[i+1][j])
14 max_down=find(i+1,j);//down
15 if(j-1>=1&&data[i][j]>data[i][j-1])
16 max_left=find(i,j-1);//left
17 if(j+1<=l&&data[i][j]>data[i][j+1])
18 max_right=find(i,j+1);//right
19 max1=max(max_up,max_down);
20 max2=max(max_left,max_right);
21 ans[i][j]=max(max1,max2)+1;
22 return ans[i][j];
23
24 }
25 int main()
26 {
27 cin>>h>>l;
28 memset(ans,0,sizeof(ans));
29 for(int i=1;i<=h;i++)
30 for(int j=1;j<=l;j++)
31 cin>>data[i][j];
32 for(int i=1;i<=h;i++)//这一步必须有
33 for(int j=1;j<=l;j++)
34 answ=find(i,j);
35 for(int i=1;i<=h;i++)
36 for(int j=1;j<=l;j++)
37 answ=max(answ,ans[i][j]);
38 cout<<answ<<endl;
39 return 0;
40 }