题目大意:
解决:记忆化搜索 dfs
#include <iostream> using namespace std; #define D "%d" #define _S scanf const int N=105; int map[105][105]; int dp[105][105]; bool vis[105][105]; int m,n; int dx[]={1,-1,0,0}; int dy[]={0,0,-1,1}; int dfs(int x,int y) { if(dp[x][y] > 0)return dp[x][y]; for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=0 && nx <m && ny>=0 && ny <n ) if(!vis[nx][ny] && map[nx][ny] < map[x][y]) { vis[nx][ny]=1; dp[x][y]=max(1+dfs(nx,ny),dp[x][y]); vis[nx][ny]=0; } } return dp[x][y]; } int main() { _S(D D,&m,&n); int i,j; for(i = 0; i < m; i++ ) for( j = 0; j < n; j++ ) _S(D,&map[i][j]); int Max=0; for(i = 0; i < m; i++) for(j = 0; j < n; j++) { memset(vis,0,sizeof(vis)); vis[i][j]=1; dfs(i,j); if(dp[i][j] > Max)Max=dp[i][j]; } printf(D "\n",Max+1); system("pause"); return 0; }