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 }

 

posted @ 2018-01-30 11:38  奋斗の小白  阅读(122)  评论(0编辑  收藏  举报