http://poj.org/problem?id=1088
1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 7 int d[102][102],a[102][102]; 8 int dis[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 9 int n,m; 10 int ok(int i,int j) 11 { 12 if(i>=0&&i<n&&j>=0&&j<m) 13 return 1; 14 return 0; 15 } 16 17 int solve(int x,int y) 18 { 19 if(d[x][y]!=-1) 20 return d[x][y]; 21 d[x][y]=1; 22 for(int i=0;i<4;i++) 23 { 24 int xx,yy; 25 xx=x+dis[i][0]; yy=y+dis[i][1]; 26 if(ok(xx,yy)&&a[x][y]>a[xx][yy]) 27 { 28 int temp; 29 temp=solve(xx,yy)+1; 30 if(d[x][y]<temp) 31 d[x][y]=temp; 32 } 33 } 34 return d[x][y]; 35 } 36 37 int main() 38 { 39 while(~scanf("%d%d",&n,&m)) 40 { 41 for(int i=0;i<n;i++) 42 for(int j=0;j<m;j++) 43 scanf("%d",&a[i][j]); 44 memset(d,-1,sizeof(d)); 45 int maxx=0; 46 for(int i=0;i<n;i++) 47 { 48 for(int j=0;j<m;j++) 49 { 50 d[i][j]=solve(i,j); 51 if(maxx<d[i][j]) 52 maxx=d[i][j]; 53 //printf("%d ",d[i][j]); 54 } 55 // printf(" "); 56 } 57 printf("%d ",maxx); 58 } 59 return 0; 60 }