动态规划,从终点往起点走。
//Memory: 572 KB
//Time: 156 MS
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int main()
{
int cas;
scanf("%d",&cas);
int dis[102][102]; //记录可以走的种类
int map[102][102];
while(cas--)
{
int n,m,i,j,it,jt;
memset(dis,0,sizeof(dis));
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d,",&map[i][j]);
dis[n][m]=1;
for(i=n;i>=1;i--)
for(j=m;j>=1;j--)
{
if(i==n && j==m)
continue;
for(it=i;it<=n;it++)
for(jt=j;jt<=m;jt++)
{
if(it+jt>i+j+map[i][j])
break;
dis[i][j]+=dis[it][jt]; //每个点可以走的种类就是它可以走到的地方的种类和
}
if(dis[i][j]>10000)
dis[i][j]=dis[i][j]%10000;
}
printf("%d\n",dis[1][1]);
}
return 0;
}