RT,代码如下
#include <bits/stdc++.h>
using namespace std;
#define INF INT_MIN
struct note{
int v,x,y;
}a[10005];
bool cmp(note a,note b)
{
return a.v < b.v;
}
int R,C,f[105][105],nx,ny,ans = INT_MIN,b[105][105];
int main()
{
cin >> R >> C;
for(int j = 1;j <= C;j++)
{
f[0][j] = f[R + 1][j] = INF;
}
for(int i = 1;i <= R;i++)
{
f[i][0] = INF;
f[i][C + 1] = INF;
for(int j = 1;j <= C;j++)
{
nx = (i - 1) * C + j - 1;
cin >> a[nx].v;
a[nx].y = i;
a[nx].x = j;
f[i][j] = INF;
b[i][j] = a[nx].v;
}
}
sort(a + 1,a + R * C + 1,cmp);
f[a[1].x][a[1].y] = 1;
for(int i = 2;i <= R * C;i++)
{
nx = a[i].x;
ny = a[i].y;
// f[nx][ny] = max(f[nx - 1][ny],max(f[nx + 1][ny],max(f[nx][ny - 1],f[nx][ny + 1])));
if(b[nx][ny] > b[nx - 1][ny])
{
f[nx][ny] = max(f[nx][ny], f[nx - 1][ny] + 1);
}
if(b[nx][ny] > b[nx][ny - 1])
{
f[nx][ny] = max(f[nx][ny], f[nx][ny - 1] + 1);
}
if(b[nx][ny] > b[nx + 1][ny])
{
f[nx][ny] = max(f[nx][ny], f[nx + 1][ny] + 1);
}
if(b[nx][ny] > b[nx][ny + 1])
{
f[nx][ny] = max(f[nx][ny], f[nx][ny + 1] + 1);
}
if(f[nx][ny] == INF)
{
f[nx][ny] = 1;
}
ans = max(f[nx][ny],ans);
}
cout << ans;
return 0;
}