#include<iostream> #include<algorithm> using namespace std; const int maxn=105; struct Point { Point() {} int x,y; int heigth; bool visited; }a[maxn][maxn]; int dp[maxn][maxn]; bool compare(Point x,Point y) { return x.heigth>y.heigth; } int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; int main() { // int t; //cin>>t; int n,m; while(cin>>n>>m) { int ans=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { a[i][j].x=i; a[i][j].y=j; cin>>a[i][j].heigth; a[i][j].visited=false; dp[i][j]=1; } } int x,y; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { int h=0; x=-1,y=-1; for(int k=0;k<n;k++) { for(int l=0;l<m;l++) { if(!a[k][l].visited&&a[k][l].heigth>h) { x=k; y=l; h=a[k][l].heigth; } } } a[x][y].visited=true; for(int d=0;d<4;d++) { int next_x=x+dx[d]; int next_y=y+dy[d]; if(next_x>=0&&next_x<n&&next_y>=0&&next_y<m&&a[next_x][next_y].heigth<a[x][y].heigth) { dp[next_x][next_y]=max(dp[x][y]+1,dp[next_x][next_y]); ans=max(ans,dp[next_x][next_y]); } } } } cout<<ans-1<<endl; } } |
Double click to view unformatted code.