只用了二维的数组来记忆
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
#define M 1000
using namespace std;
int a[M][M];//m*n
int f[M][M];
int s[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int m,n;
bool ok(int x,int y)
{
return (x>=0&&x<n&&y>=0&&y<m);
}
int dfs(int x,int y)
{
if(f[x][y]>=0)return f[x][y];
int ma=0;
for(int i=0;i<4;i++)
{
int xx=x+s[i][0];
int yy=y+s[i][1];
if(ok(xx,yy)&&a[xx][yy]<a[x][y])
{
if(ma<dfs(xx,yy))
{
ma=dfs(xx,yy);
}
}
}
f[x][y]=ma+1;
return f[x][y];
}
int main()
{
scanf("%d%d",&n,&m);
memset(f,-1,sizeof(f));
int mi=-1;
int x,y;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
mi=-1;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(mi==-1||mi<dfs(i,j))
{
mi=dfs(i,j);
}
}
}
printf("%d\n",mi);
}