输入:
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;
int r,c;
int h[105][105];
int flag[105][105];
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int dfs(int x,int y)
{
if(flag[x][y])
{
return flag[x][y];
}
int nx,ny,maxx=1;
for(int i=0;i<4;++i)
{
nx=x+dir[i][0];
ny=y+dir[i][1];
if(nx>=1&&nx<=r&&ny>=1&&ny<=c&&h[nx][ny]<h[x][y])
{
maxx=max(maxx,dfs(nx,ny)+1);
}
}
flag[x][y]=maxx;
return maxx;
}
int main()
{
while(cin>>r)
{
cin>>c;
for(int i=1;i<=r;++i)
{
for(int j=1;j<=c;++j)
{
cin>>h[i][j];
}
}
memset(flag,0,sizeof(flag));
int ans=0;
for(int i=1;i<=r;++i)
{
for(int j=1;j<=c;++j)
{
flag[i][j]=dfs(i,j);
ans=max(ans,flag[i][j]);
}
}
cout<<ans<<endl;
}
return 0;
}