#include <bits/stdc++.h> using namespace std; #define ll long long const int M=1e3+1; const int dx[4]={1,0,-1,0};//存方向移动 const int dy[4]={0,1,0,-1}; int r,c; int m[M][M];//图 int f[M][M];//到这点的最长距离 int dfs(int x,int y){ if(f[x][y]!=0) return f[x][y];//表示在搜索时,这个点已经知道最长距离 int maxt=1; int t; for(int i=0;i<4;i++){ int tx=x+dx[i],ty=y+dy[i]; //判断这个点是否符合行进 if(tx>0&&ty>0&&tx<=r&&ty<=c&&m[tx][ty]>m[x][y]) { t=dfs(tx,ty)+1;//因为距离是经过的总长,所以是差+1 maxt=max(t,maxt); } } f[x][y]=maxt; return maxt; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>r>>c; for(int i=1;i<=r;i++){ for(int j=1;j<=c;j++){ cin>>m[i][j]; } } memset(f,0,sizeof(f)); int ans=0; for(int i=1;i<=r;i++){ for(int j=1;j<=c;j++){ f[i][j]=dfs(i,j);//算出各点的最长距离 ans=max(ans,f[i][j]);//求最长的 } } printf("%d\n",ans); return 0; }
原文:https://www.cnblogs.com/BlogBaudelaire/p/14623366.html