http://acm.pku.edu.cn/JudgeOnline/problem?id=1088
Код:
#include <iostream>
#include <math.h>
using namespace std;
int B[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
int flag[101][101]={0};
int A[103][103]={0};
int f(int i,int j)
{ int x,y;
if(flag[i][j]!=0) return flag[i][j];
else {
for(int a=0;a<4;a++)
{ x=i+B[a][0];
y=j+B[a][1];
if(A[i][j]>A[x][y]) flag[i][j]=max(flag[i][j],f(x,y)+1);
}
if(flag[i][j]==0) flag[i][j]=1;
return flag[i][j];
}
}
int main()
{
int R,C;
scanf("%d%d",&R,&C);
for(int i=0;i<=C+1;i++)
{A[0][i]=10001;A[R+1][i]=10001;}
for(int i=0;i<=R+1;i++)
{A[i][0]=10001;A[i][C+1]=10001;}
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++)
scanf("%d",&A[i][j]);
int maxn=1;
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++)
{if(f(i,j)>maxn) maxn=f(i,j);}
printf("%d\n",maxn);
return 0;
}