简单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 }