hdu 1978 how many way

记忆化搜索,别的不多说:

代码如下:

#include"stdio.h"
#include"string.h"

int dis[150][150],count[150][150],vis[150][150];
int n,m;
int dfs(int x,int y)
{
    int i,j,ans=0;
    if(x==n&&y==m)
        return 1;
    if(vis[x][y]!=0)
        return count[x][y];
    for(i=0;i<=dis[x][y]&&i<=n;i++)
    {
        for(j=0;j<=dis[x][y]-i&&j<=m;j++)
        {
            if(i==0&&j==0)
                continue;
            ans=(ans+dfs(x+i,y+j))%10000;
        }
    }
    vis[x][y]=1;
    return count[x][y]=ans;
}

int main( )
{
    int i,j,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        memset(vis,0,sizeof(vis));
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                scanf("%d",&dis[i][j]);
        printf("%d\n",dfs(1,1));
    }
    return 0;
}
原文地址:https://www.cnblogs.com/chaosheng/p/2459809.html