#include <stdlib.h> #include <stdio.h> #define LOWEST -1000000 int row,col,map[1000][200],dp[1000][200]; int direc[4][2]={{0,1},{-1,0},{0,-1},{1,0}}; int main() { int i,j,result=LOWEST,tmp; scanf("%d%d",&row,&col); for(i=0;i<row;++i) { for(j=0;j<col;++j) { scanf("%d",&map[i][j]); dp[i][j]=LOWEST; } } int getLongest(int,int); for(i=0;i<row;++i) { for(j=0;j<col;++j) { tmp=getLongest(i,j); if(tmp>result) { result=tmp; } } } printf("%d/n",result); return 0; } bool notOut(int x,int y); int getLongest(int m,int n) { if(dp[m][n]!=LOWEST) { return dp[m][n]; } int i,tmp,x,y; dp[m][n]=1; for(i=0;i<4;++i) { x=m+direc[i][0]; y=n+direc[i][1]; if(notOut(x,y)==true&&map[x][y]<map[m][n]) { tmp=getLongest(x,y)+1; if(tmp>dp[m][n]) { dp[m][n]=tmp; } } } return dp[m][n]; } bool notOut(int x,int y) { return 0<=x&&x<row&&0<=y&&y<col; }