1.题目链接。题目意思就很明显了,每走到一个格子可以获得这个格子的能量,然后凭借这些能量可以继续走到写一个格子。那么群从起点走到重点有多少中走法。
2.可以DP,当然最简单的写法还是dfs加记忆化了。dp[x][y]表示从(x,y)到终点有多少中走法,那么直接搜索即可。代码如下:
using namespace std;
const int MAX = 110;
int dp[MAX][MAX];
int mp[MAX][MAX];
int n, m;
using namespace std;
int check(int x, int y)
{
  if (x<0 || x>n || y<0 || y>m)
    return false;
  return true;
}
int dfs(int x, int y)
{
  if (dp[x][y] >=0)
    return dp[x][y];
  dp[x][y] = 0;
  for (int i = 0; i <= mp[x][y]; i++)
  {
    for (int j = 0; j <= mp[x][y] - i; j++)
    {
      if (!check(x + i, y + j))
        continue;
      dp[x][y] = (dp[x][y] + dfs(x + i, y + j)) % 10000;
    }
  }
  return dp[x][y];
}
int main()
{
  int T;
  scanf("%d", &T);
  for (int i = 0; i < T; i++)
  {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <=n; i++)
    {
      for (int j = 1; j <=m; j++)
      {
        scanf("%d", &mp[i][j]);
      }
    }
    memset(dp, -1, sizeof(dp));
    dp[n][m] = 1;
    printf("%d\n", dfs(1,1));
  }
}
                










