poj 1088

题目大意:

解决:记忆化搜索 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;
}

 

 

posted on 2011-09-04 22:24  猿类的进化史  阅读(174)  评论(0编辑  收藏  举报