poj 1088 滑雪
http://poj.org/problem?id=1088
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int g[200][200]; 7 int dp[200][200]; 8 int r,c; 9 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; 10 int max1=-1; 11 12 int dfs(int x,int y) 13 { 14 if(dp[x][y]) return dp[x][y]; 15 dp[x][y]=1; 16 for(int i=0; i<4; i++) 17 { 18 int xx=x+dir[i][0]; 19 int yy=y+dir[i][1]; 20 if(xx>=1&&xx<=r&&yy>=1&&yy<=c&&g[x][y]>g[xx][yy]) 21 { 22 dp[x][y]=max(dp[x][y],dfs(xx,yy)+1); 23 } 24 } 25 return dp[x][y]; 26 } 27 28 int main() 29 { 30 while(scanf("%d%d",&r,&c)!=EOF) 31 { 32 max1=-1; 33 memset(dp,0,sizeof(dp)); 34 for(int i=1; i<=r; i++) 35 { 36 for(int j=1; j<=c; j++) 37 { 38 scanf("%d",&g[i][j]); 39 } 40 } 41 for(int i=1; i<=r; i++) 42 { 43 for(int j=1; j<=c; j++) 44 { 45 if(dp[i][j]==0) 46 { 47 dfs(i,j); 48 max1=max(max1,dp[i][j]); 49 } 50 } 51 } 52 printf("%d\n",max1); 53 } 54 return 0; 55 }