#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define SIZE 102
#define MOD 10000
//bool vis[SIZE][SIZE];
int mat[SIZE][SIZE];
int dp[SIZE][SIZE];
int n,m;
void init()
{
memset(dp,0,sizeof(dp));
memset(mat,0,sizeof(mat));
}
int main()
{
int ncase,i,j,tt,ii,jj,mm;
scanf("%d",&ncase);
while(ncase--)
{
init();
scanf("%d%d",&n,&m);
dp[1][1]=1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
scanf("%d",&mat[i][j]);
tt=mm=mat[i][j];
if(tt)
{
for(ii=i;ii<=i+tt&&ii<=n;ii++)
{
for(jj=0;jj<=mm&&jj+j<=m;jj++)
{
if(ii==i&&j+jj==j)continue;
dp[ii][j+jj]=((dp[ii][j+jj]+dp[i][j]))%MOD;
}
mm--;
}
}
}
printf("%d\n",dp[n][m]);
}
return 0;
}
原文:http://blog.csdn.net/u011026968/article/details/19421527