我知道,应该发学术版,但这个题目真的没多少人回复,灌水说不定有奇效。
60分四wa
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
long long x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+(ch-'0');
ch=getchar();
}
return x*f;
}
int dp[1001][1001];
int height[1001][1001];
int n,m;
int dfs(int x,int y)
{
if(dp[x][y])
return dp[x][y];
dp[x][y]=1;
if(x-1>0&&y>0&&x<=n&&y<=m&&height[x-1][y]<=height[x][y])
{
dfs(x-1,y);
dp[x][y]=max(dp[x][y],dp[x-1][y]+1);
}
if(x+1<=n&&y>0&&x>0&&y<=m&&height[x+1][y]<=height[x][y])
{
dfs(x+1,y);
dp[x][y]=max(dp[x][y],dp[x+1][y]+1);
}
if(y-1>0&&x<=n&&y<=m&&x>0&&height[x][y-1]<=height[x][y])
{
dfs(x,y-1);
dp[x][y]=max(dp[x][y],dp[x][y-1]+1);
}
if(y+1<=m&&y>0&&x<=n&&x>0&&height[x][y+1]<=height[x][y])
{
dfs(x,y+1);
dp[x][y]=max(dp[x][y],dp[x][y+1]+1);
}
return dp[x][y];
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
height[i][j]=read();
}
int ans,maxn=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
maxn=max(dfs(i,j),maxn);
cout<<maxn<<endl;
return 0;
}