hdu 1978

记忆化搜索

View Code
#include<stdio.h>
#include<string.h>

int n,m;
int as[105][105],hash[105][105];

int dfs(int x,int y)
{
    int i,j;
    if(x==n||y==m)return 0;
    if(hash[x][y]) return hash[x][y];
    for(i = 0; i <= as[x][y]; ++ i) for(j = 0; j <= as[x][y]; ++ j)
        if((i+j)&&(i+x<n)&&(j+y<m)&&(i+j<=as[x][y]))
        { hash[x][y] += dfs(x+i,j+y); hash[x][y] %= 10000; }
    return hash[x][y]%10000;
}
int main()
{
    int i,j,k,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        for(i = 0; i < n; ++ i)for(j = 0; j < m; ++ j) scanf("%d",&as[i][j]);
        memset(hash,0,sizeof(hash)); hash[n-1][m-1] = 1;
        for(i = 0; i <= as[0][0]; ++ i) for(j = 0; j <= as[0][0]; ++ j) 
            if((i+j)&&(i<n)&&(j<m)&&(i+j<=as[0][0]))
            { hash[0][0] += dfs(i,j); hash[0][0] %= 10000; }
        printf("%d\n",hash[0][0]%10000);
    }return 0;
}

posted on 2012-04-27 16:02  aigoruan  阅读(207)  评论(0)    收藏  举报

导航