X-man

导航

hdu 1978 How many ways

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int m,n,ans;
int mat[101][101],vis[101][101];
bool v[101][101];
int Dfs(int x,int y)
{
    if(x<1||y<1||x>m||y>n)
        return 0;
    if(x==m&&y==n)
        return 1;
    if(v[x][y]!=false)
        return vis[x][y];
    for(int i=0;i<=mat[x][y];i++)
    for(int j=0;i+j<=mat[x][y];j++)
    {
        if(i!=0||j!=0)
        {
            vis[x][y]+=Dfs(x+i,y+j);
            if(vis[x][y]>=10000)
                vis[x][y]%=10000;
        }
    }
    v[x][y]=true;
    return vis[x][y];
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&m,&n);
        memset(v,false,sizeof(v));
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            scanf("%d",&mat[i][j]);
        printf("%d\n",Dfs(1,1)%10000);
    }
    return 0;
}

 

posted on 2013-10-14 16:29  雨钝风轻  阅读(178)  评论(0编辑  收藏  举报