首页 > 代码库 > 【HDOJ】1978 How many ways

【HDOJ】1978 How many ways

DFS。

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define MAXNUM 105
 5 
 6 int map[MAXNUM][MAXNUM], ways[MAXNUM][MAXNUM], n, m;
 7 
 8 int dfs(int x, int y) {
 9     int i, j, way=0;
10 
11     if (ways[x][y])
12         return ways[x][y];
13 
14     for (i=0; i<=map[x][y]; ++i) {
15         for (j=0; i+j<=map[x][y]; ++j) {
16             if (i==0 && j==0)
17                 continue;
18             if (x+i>=n || y+j>=m)
19                 continue;
20             way += dfs(x+i, y+j);
21             if (way >= 10000)
22                 way %= 10000;
23         }
24     }
25 
26     ways[x][y] = way;
27 
28     return way;
29 }
30 
31 int main() {
32     int t;
33     int i, j;
34 
35     scanf("%d", &t);
36 
37     while (t--) {
38         scanf("%d %d", &n, &m);
39         memset(ways, 0, sizeof(ways));
40         for (i=0; i<n; ++i)
41             for (j=0; j<m; ++j)
42                 scanf("%d", &map[i][j]);
43         ways[n-1][m-1] = 1;
44         i = dfs(0, 0);
45         printf("%d\n", i);
46     }
47 
48     return 0;
49 }