滑雪

记忆化(应该是)不然会T.....去一次找最大值就好了:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 int a[110][110];
 8 int n,m;
 9 int ans=0;
10 int ans1[4]={1,-1,0,0};
11 int ans2[4]={0,0,1,-1};
12 int b[110][110]={0};
13 int sum=0;
14 int dfs(int x,int y)
15 {
16     if(b[x][y]) return b[x][y];//如果原来搜过,就直接反回 
17     sum=1;
18     for(int i=0;i<4;i++)
19     {
20         int tx=x+ans1[i];
21         int ty=y+ans2[i];
22         if(tx>=1&&ty>=1&&tx<=n&&ty<=m&&a[tx][ty]<a[tx-ans1[i]][ty-ans2[i]])//
23         {
24             sum=max(sum,dfs(tx,ty)+1);
25         }
26     }
27     b[x][y]=sum;//记录 
28     return sum;
29 }
30 int main()
31 {
32     cin>>n>>m;
33     for(int i=1;i<=n;i++)
34     {
35         for(int j=1;j<=m;j++)
36         {
37             cin>>a[i][j];
38         }
39     }
40     int maxn=0;
41     for(int i=1;i<=n;i++)
42     {
43         for(int j=1;j<=m;j++)
44         {
45             ans=max(ans,dfs(i,j));//比较 
46         }
47     }
48     cout<<ans;
49 } 

.....

posted @ 2018-08-08 14:09  DJY_01  阅读(187)  评论(0编辑  收藏  举报