POJ 1008 滑雪 记忆化搜索

http://poj.org/problem?id=1088

题意:略

了解下记忆化搜索

没时间了 先贴个代码,明天详解

代码:

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#define Max(a,b)a>b?a:b
using namespace std;
int a[102][102],f[102][102];
int dir[4][2]={0,-1,-1,0,0,1,1,0};

int r,c,ans;

int dfs(int x,int y)
{
    int k,XX,YY;
    if(f[x][y]>1) return f[x][y];
    for(k=0;k<4;k++)
    {
       XX=x+dir[k][0];
       YY=y+dir[k][1];
       if(XX<0||XX>=r||YY<0||YY>=c||a[x][y]<=a[XX][YY])continue;
       int t=dfs(XX,YY);
       if(t>=f[x][y])
         f[x][y]=t+1;
    }
    return f[x][y];
}

int main()
{
    int i,j;
    scanf("%d%d",&r,&c);
    for(i=0;i<r;i++)
     for(j=0;j<c;j++)
     {
        scanf("%d",&a[i][j]);
        f[i][j]=1;
     }
    int ans=0;
    for(i=0;i<r;i++)
     for(j=0;j<c;j++)
     {
        int t=dfs(i,j);
        ans=Max(ans,t);
     }
    printf("%d\n",ans);
    return 0;
}

  

posted @ 2012-03-11 22:11  快乐.  阅读(158)  评论(0编辑  收藏  举报