题目链接https://www.luogu.com.cn/problem/P1434测试样例:
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
样例输出:
25
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+5;
typedef long long ll;
ll inf = 0x3f3f3f3f;
int n,m;
int mx[]={-1,1,0,0};
int my[]={0,0,-1,1};
ll a[N][N],dis[N][N];
ll dfs(int x,int y)
{
if(dis[x][y]) return dis[x][y];//已经搜过直接返回
ll steps = 1;
for(int i=0;i<4;i++)
{
int dx=x+mx[i], dy=y+my[i];
if(dx<1||dx>n||dy<1||dy>m||a[dx][dy]>=a[x][y]) continue;//不合法情况
steps = max(steps,dfs(dx,dy) + 1);
}
return dis[x][y] = steps;//存储距离
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
ll maxu=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dfs(i,j);
maxu=max(maxu, dis[i][j]);
}
}
cout<<maxu<<endl;
return 0;
}