经典记忆化搜索题目。当 从每个点一次进行搜索时要采用 记忆化搜索
#include"cstdio" #include"algorithm" using namespace std; const int MAXN=105; int g[MAXN][MAXN]; int t[MAXN][MAXN]; int maxn; int n,m; int by,bx; int ans; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; int dfs(int y,int x) { if(t[y][x]) return t[y][x]; int k=0; for(int i=0;i<4;i++) { int ny=dy[i]+y; int nx=dx[i]+x; if(0<=ny&&ny<n&&0<=nx&&nx<m&&g[ny][nx]<g[y][x]) { k=max(dfs(ny,nx),k); } } return t[y][x]=k+1; } int main() { scanf("%d %d",&n,&m); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%d",&g[i][j]); } } for(int i=0;i<n;i++) for(int j=0;j<m;j++) { ans=max(dfs(i,j),ans); } printf("%d\n",ans); return 0; }
时间: 2024-12-27 23:56:00