#include <iostream> #include <queue> #include <cstdio> using namespace std; int R,C; int Mar[110][110]; int D[110][110]; int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; int solve(int u,int v,int flag) { if(u<0 || v<0 || u>=R || v>=C || Mar[u][v]>=flag) return 0; if(D[u][v] != 0) return D[u][v]; int max = 1; int x,y; for(int i=0;i<4;++i) { int temp= 1; x = u+dir[i][0]; y = v+dir[i][1]; temp+=solve(x,y,Mar[u][v]); if(temp>max) max = temp; } D[u][v] = max; return max; } int main() { cin>>R>>C; int max = 0,cas=0; for(int i=0;i<R;++i) { for(int j=0;j<C;++j) { scanf("%d",&Mar[i][j]); D[i][j] = 0; } } for(int i=0;i<R;++i) { for(int j=0;j<C;++j) { cas = solve(i,j,10001); if(cas > max) max = cas; } } cout<<max<<endl; return 0; } |
Double click to view unformatted code.