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;

}

 

你可能感兴趣的:(HDU)