滑雪
记忆化(应该是)不然会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 }
.....