开o2优化2,10会RE,不开WA
#include<bits/stdc++.h>
using namespace std;
struct side{
int x,y,z;
}g[105];
bool operator < (side x,side y){return x.z<y.z;}
int r,c,ans,anss,f[105][105],w[105][105];
bool dos(int x,int y,int z){
if(x>r||x<=0||y<=0||y>c||w[x][y]>=z)return 0;
else return 1;
}
int finds(int x,int y ,int z){
int a=0;
if(dos(x+1,y,z))a=max(a,f[x+1][y]);
if(dos(x-1,y,z))a=max(a,f[x-1][y]);
if(dos(x,y+1,z))a=max(a,f[x][y+1]);
if(dos(x,y-1,z))a=max(a,f[x][y-1]);
return a;
}
int main() {
cin>>r>>c;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{cin>>w[i][j];g[++ans].x=i;g[ans].y=j;g[ans].z=w[i][j];}
sort(g+1,g+ans+1);
for(int i=1;i<=ans;i++)
{
f[g[i].x][g[i].y]=1+finds(g[i].x,g[i].y,g[i].z);
anss=max(anss,f[g[i].x][g[i].y]);
}
cout<<anss;
}