滑雪

mayijun123456 2023-11-18 10:21:17

#include<bits/stdc++.h> int a[105][105],d[105][105]; int n,m,ans=0; using namespace std; bool check(int a,int b) { if(a<=0||b<=0||a>n||b>n) return 0; else return 1; } int dir[4][2]= {{-1,0},{0,-1},{1,0},{0,1}}; int dfs(int x,int y) { if(d[x][y]) return d[x][y]; int num=0; for(int i=0; i<4; i++) { int newx=x+dir[i][0]; int newy=y+dir[i][1]; if(check(newx,newy)&&a[x][y]<a[newx][newy]) num=max(dfs(newx,newy),num); } num++; return d[x][y]=num; } int main( ) { cin>>n>>m; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) cin>>a[i][j]; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { ans=max(ans,dfs(i,j)); } } cout<<ans<<endl; return 0; }