简单DP,N×M的网格其中有一条边坏掉了,问从起点到终点的放法数

有两种方法,一种是DP很好理解

 

 1 //#define LOCAL
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 int dp[42][42];
 6 bool flag[42][42];
 7 
 8 int main(void)
 9 {
10     #ifdef LOCAL
11         freopen("2125in.txt", "r", stdin);
12     #endif
13 
14     int r, c;
15     while(scanf("%d%d", &r, &c) == 2)
16     {
17         int y1, x1, y2, x2;
18         scanf("%d%d%d%d", &y1, &x1, &y2, &x2);
19         dp[0][1] = 1;
20         memset(flag, false, sizeof(flag));
21         flag[x1+1][y1+1] = flag[x2+1][y2+1] = true;
22         for(int i = 1; i <= r; ++i)
23             for(int j = 1; j <= c; ++j)
24             {
25                 dp[i][j] = dp[i-1][j] + dp[i][j-1];
26                 if(flag[i][j])
27                 {
28                     if(flag[i][j-1])
29                         dp[i][j] -= dp[i][j-1];
30                     if(flag[i-1][j])
31                         dp[i][j] -= dp[i-1][j];
32                 }
33             }
34         printf("%d\n", dp[r][c]);
35     }
36     return 0;
37 }
代码君

相关文章:

  • 2021-11-28
  • 2021-04-20
  • 2021-09-26
  • 2021-09-20
  • 2022-12-23
  • 2022-01-22
猜你喜欢
  • 2021-06-19
  • 2021-09-02
  • 2021-05-30
  • 2022-01-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案