/*
dp[i][j]+=dp[x][y]; (x,y)到(i,j)的曼哈顿距离小于map[i][j]
*/
#include<stdio.h>
#include<string.h>
#define maxn 150
int map[maxn][maxn],dp[maxn][maxn];
int main()
{
int t,i,j,x,y;
int n,m;
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,0,sizeof(dp));
dp[1][1]=1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
for(x=0;x<=map[i][j] && x<=n ;x++)
for(y=0;x+y<=map[i][j] && y<=m;y++)
if(x!=0 || y!=0)
dp[i+x][j+y]=(dp[i+x][j+y]+dp[i][j])%10000;
//printf("************\n");
/*
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%d ",dp[i][j]);
printf("\n");
}
*/
printf("%d\n",dp[n][m]);
}
return 0;
}
hdu 1978
最新推荐文章于 2022-02-06 15:22:03 发布