POJ1088-滑雪 记忆化DP

DP+DFS,记忆化搜索,典型的用空间换时间。

View Code
#include<stdio.h>
#include<string.h>
int dp[101][101],h[101][101];
int dir[4][2]={1,0,-1,0,0,1,0,-1};
int m,n;
int dfs(int x,int y)
{
    if(dp[x][y])return dp[x][y];
    int i,temp;
    for(i=0;i<4;i++)
    {
        int fx=x+dir[i][0];
        int fy=y+dir[i][1];
        if(fx>=0&&fx<n&&fy>=0&&fy<m)
        {
            if(h[fx][fy]<h[x][y])
            {
                temp=dfs(fx,fy);
                if(temp+1>dp[x][y])dp[x][y]=temp+1;
            }
        }
    }
    return dp[x][y];
}
int main()
{
    int i,j;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            scanf("%d",&h[i][j]);
        }
        memset(dp,0,sizeof(dp));
        int max=0;
        for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        {
            dp[i][j]=dfs(i,j);
            if(max<dp[i][j])max=dp[i][j];
        }
        printf("%d\n",max+1);
    }
    return 0;
}

 

 

posted @ 2012-06-02 22:34  To be an ACMan  Views(178)  Comments(0)    收藏  举报