题目大意:
解决:记忆化搜索 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;
}
浙公网安备 33010602011771号