以为很复杂,但是代码其实很直观。
#include <stdio.h>
#include <string.h>
#define N 101
int dp[N][N];
int main ()
{
int t,n,m,i,j,k,l,num;
scanf("%d",&t);
while (t--)
{
scanf ("%d %d",&n,&m);
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
scanf("%d",&num);
for (k=0;k<=num;k++)
{
for (l=0;l+k<=num;l++)
{
if(i + k <= n && j +l <= m)
{
if (k==0 && l==0) continue;
dp[i+k][j+l]=(dp[i+k][j+l]+dp[i][j])%10000;
}
}
}
}
}
printf ("%d\n",dp[n-1][m-1]);
}
return 0;
}