Poj 1088 滑雪 递归实现
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define MAX_N 105 5 using namespace std; 6 int len[MAX_N][MAX_N],A[MAX_N][MAX_N]; 7 int d[4][2]= {{-1,0},{0,1},{1,0},{0,-1}}; //左 下 右 上 8 int R,C; 9 int Dp(int i,int j) 10 { 11 if(len[i][j]!=0)return len[i][j]; 12 int Max=0,s; 13 for(int t=0; t<4; t++) 14 { 15 int x1=i+d[t][0],y1=j+d[t][1]; //四个方向变换后的x y值 16 if(x1>=0&&x1<R&&y1>=0&&y1<C&&A[x1][y1]<A[i][j]) 17 { 18 s=Dp(x1,y1); 19 if(s>Max)Max=s; 20 } 21 22 } 23 return Max+1; 24 } 25 26 int main() 27 { 28 while(scanf("%d%d",&R,&C)!=EOF) 29 { 30 int Mx=-1; 31 memset(len,0,sizeof(len)); 32 for(int i=0; i<R; i++) 33 for(int j=0; j<C; j++) 34 scanf("%d",&A[i][j]); 35 for(int i=0; i<R; i++) 36 for(int j=0; j<C; j++) 37 { 38 len[i][j]=Dp(i,j); 39 if(len[i][j]>Mx)Mx=len[i][j]; 40 } 41 printf("%d\n",Mx); 42 } 43 44 }