随便写写~
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int dp[N][N],b[N][N],n,m,Max,divx[4]={1,0,-1,0},divy[4]={0,1,0,-1};
struct node{
int x,y,h;
}a[N*N];
bool check(int x,int y)
{
if(x<=0||y<=0||x>n||y>m)return false;
return true;
}
bool cmp(node A,node B){
return A.h>B.h;
}//按高度从大到小排
int main()
{
cin>>n>>m;
int t=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>b[i][j];
a[t]={i,j,b[i][j]};
dp[i][j]=1;
t++;
}
sort(a,a+t,cmp);
for(int i=0;i<t;i++)
{
int x1=a[i].x,y1=a[i].y;
Max=max(Max,dp[x1][y1]);
for(int i=0;i<4;i++)
{
int x2=x1+divx[i],y2=y1+divy[i];
if(check(x2,y2))
if(b[x1][y1]>b[x2][y2])
dp[x2][y2]=max(dp[x2][y2],dp[x1][y1]+1);
}
}
cout<<Max;
return 0;
}