#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,m,g[maxn][maxn],f[maxn][maxn];
//f数组记录所求的,本题求路径数则记录..
int dir[4][2]={1,0,0,1,-1,0,0,-1};
int check(int x,int y){
if(x>=1&&x<=n&&y>=1&&y<=m) return 1;
return 0;
}
int dfs(int x,int y){
if(f[x][y]>=0) return f[x][y];//>=0表示记忆过 ,-1是没记忆过
int tx,ty;
f[x][y]=0; //若最后一格不是终点,dfs返回0
//步数可以不走完。因为只能往下或往右走 所以当步数>走到终点的步数时,就不用走完
for(int i=0;i<=g[x][y];i++)//向右走
for(int j=0;j<=g[x][y]-i;j++){//向下走
tx=x+i; ty=y+j;
if(check(tx,ty)){
/*若最后一格不是终点,dfs返回0,所以相当于于没加
若是终点则返回1,从而实现了f计算起点到终点的路径数*/
f[x][y]=(f[x][y]+dfs(tx,ty))%10000;
}
}
return f[x][y]; //若最后一格不是终点,dfs返回0
}
int main(){
int T;cin>>T;
while(T--){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%d",&g[i][j]);
f[i][j]=-1;
}
f[n][m]=1;//最后一格若是终点则返回1
cout<<dfs(1,1)<<endl;
}
}
02-06
4万+