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; }