羞耻的wa了很多次 因为 没读好题 让求的是经过 的 点 的个数的最大值 我一直算的 起点 终点 差值最大值 受教了。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <climits>
using namespace std;
int a[101][101],dp[101][101],visi[101][101],c,r;
int solve(int i,int j)
{
if(visi[i][j])
return dp[i][j];
visi[i][j]=1;
dp[i][j]=1;
if(i+1<=c&&a[i+1][j]<a[i][j])
dp[i][j]=max(dp[i][j],1+solve(i+1,j));
if(i-1>=1&&a[i-1][j]<a[i][j])
dp[i][j]=max(dp[i][j],1+solve(i-1,j));
if(j+1<=r&&a[i][j+1]<a[i][j])
dp[i][j]=max(dp[i][j],1+solve(i,j+1));
if(j-1>=1&&a[i][j-1]<a[i][j])
dp[i][j]=max(dp[i][j],1+solve(i,j-1));
return dp[i][j];
}
int main()
{
scanf("%d %d",&c,&r);
memset(dp,0,sizeof(dp));
memset(visi,0,sizeof(visi));
for(int i=1;i<=c;++i)
for(int j=1;j<=r;++j)
scanf("%d",&a[i][j]);
int maxn=0;
for(int i=1;i<=c;++i)
for(int j=1;j<=r;++j)
maxn=max(maxn,solve(i,j));
printf("%d\n",maxn);
return 0;
}