不知道哪里错了...
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long R,C,ans;
long long area[101][101]={0};
long long mem[101][101]={0};
long long movex[4]={0,0,-1,1};
long long movey[4]={1,-1,0,0};
long long dfs(long long r,long long c)
{
if(mem[r][c]) return mem[r][c];
for(int i=0;i<4;i++){
int fr=r+movex[i];
int fc=c+movey[i];
if(fr>0 && fc>0 && fr<=R && fc<=C && area[r][c]>area[fr][fc]){
mem[r][c]=max(mem[r][c],dfs(fr,fc)+1);
}
}
return mem[r][c];
}
int main()
{
scanf("%lld %lld",&R,&C);
for(long long i=1;i<=R;i++){
for(long long j=1;j<=C;j++){
scanf("%lld",&area[i][j]);
}
}
for(long long i=1;i<=R;i++){
for(long long j=1;j<=C;j++){
mem[i][j]=1;
}
}
for(long long i=1;i<=R;i++){
for(long long j=1;j<=C;j++){
ans=max(ans,dfs(i,j));
}
}
printf("%lld",ans);
return 0;
}

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long R,C,ans;
long long area[101][101]={0};
long long mem[101][101]={0};
long long movex[4]={0,0,-1,1};
long long movey[4]={1,-1,0,0};
long long dfs(long long r,long long c)
{
if(mem[r][c]) return mem[r][c];
for(int i=0;i<4;i++){
int fr=r+movex[i];
int fc=c+movey[i];
if(fr>0 && fc>0 && fr<=R && fc<=C && area[r][c]>area[fr][fc]){
mem[r][c]=max(mem[r][c],dfs(fr,fc)+1);
}
}
return mem[r][c];
}
int main()
{
scanf("%lld %lld",&R,&C);
for(long long i=1;i<=R;i++){
for(long long j=1;j<=C;j++){
scanf("%lld",&area[i][j]);
}
}
for(long long i=1;i<=R;i++){
for(long long j=1;j<=C;j++){
mem[i][j]=1;
}
}
for(long long i=1;i<=R;i++){
for(long long j=1;j<=C;j++){
ans=max(ans,dfs(i,j));
}
}
printf("%lld",ans);
return 0;
}