```cpp
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int dx[8]={0,0,1,-1};
const int dy[8]={1,-1,0,0};
const int MAXN=500;
int n,m,ans;
int a[MAXN][MAXN];
int f[MAXN][MAXN];
namespace mine
{
int read(void)
{
int num=0;
bool negative=false;
char c=getchar();
while(!isdigit(c) && c!='-')
c=getchar();
if(c=='-')
negative=true;
else
num=c-'0';
c=getchar();
while(isdigit(c))
{
num=(num<<1)+(num<<3)+(c^48);
c=getchar();
}
return negative?0-num:num;
}
}
int dfs(int x,int y)
{
if(f[x][y])
return f[x][y];
int t=1;
for(int i=0;i<4;i++)
{
const int xx=x+dx[i];
const int yy=y+dy[i];
if(xx>=1 && xx<=n && yy>=1 && yy<=m && a[x][y]<a[xx][yy])
t=max(dfs(xx,yy)+1,t);
}
f[x][y]=t;
return t;
}
void input(void)
{
using namespace mine;
n=read();
m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=read();
}
void solve(void)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int t=dfs(i,j);
f[i][j]=t;
ans=max(ans,f[i][j]);
}
}
int main()
{
input();
solve();
cout<<ans;
return 0;
}
```
码风清奇……
by Hexarhy @ 2019-02-05 16:30:30