hdu1978 记忆化搜索

 用一个数组记录的同时进行搜索。

#include<stdio.h>
#include<string.h>
const int maxn = 110;
int map[maxn][maxn],n,m,dp[maxn][maxn];
int ok(int x,int y)
{
    if(x<1||y<1||x>n||y>m)
        return 0;
    return 1;
}
int dfs(int x,int y)
{
    int i,j;
    if(dp[x][y]>=0)
        return dp[x][y];
    dp[x][y]=0;
    for(i=0;i<=map[x][y];i++)
    {
        for(j=0;j<=map[x][y]-i;j++)
        {
            if(ok(x+i,y+j))
                dp[x][y]=(dp[x][y]+dfs(x+i,y+j))%10000;
        }
    }
    return dp[x][y];
}
int main()
{
    int i,j,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                scanf("%d",&map[i][j]);
            }
        }
        memset(dp,-1,sizeof(dp));
        dp[n][m]=1;
        int ans=dfs(1,1);
        printf("%d\n",ans);
    }
}

 

posted @ 2015-11-05 16:37  sweat123  阅读(160)  评论(0编辑  收藏  举报