洛谷-滑雪
https://www.luogu.com.cn/problem/P1434
解题思路
遍历每一个点可以走的最大距离,并记下来
#include <bits/stdc++.h>
using namespace std;
int n,m,ans;
int a[110][110];
int dp[110][110];
int fx[4][4]= {{0,1},{0,-1},{1,0},{-1,0}};
int dfs(int x,int y)
{
if(dp[x][y])
return dp[x][y];
dp[x][y]=1;
for(int i=0; i<4; i++)
{
int dx=x+fx[i][0],dy=y+fx[i][1];
if(dx<1||dy<1||dx>n||dy>m)
continue;
if(a[dx][dy]>a[x][y])
continue;
dfs(dx,dy);
dp[x][y]=max(dp[x][y],dp[dx][dy]+1);
}
return dp[x][y];
}
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;
/*for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
cout<<dp[i][j]<<" ";
cout<<endl;
}*/
return 0;
}