洛谷-P1002 過河卒
阿新 • • 發佈:2020-12-09
洛谷-P1002 過河卒
題目描述
棋盤上 \(A\) 點有一個過河卒,需要走到目標 \(B\) 點。卒行走的規則:可以向下、或者向右。同時在棋盤上 \(C\) 點有一個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為“馬攔過河卒”。
棋盤用座標表示,\(A\) 點 \((0, 0)\)、\(B\) 點 \((n, m)\),同樣馬的位置座標是需要給出的。
現在要求你計算出卒從 \(A\) 點能夠到達 \(B\) 點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
輸入格式
一行四個正整數,分別表示 \(B\) 點座標和馬的座標。
輸出格式
一個整數,表示所有的路徑條數。
輸入輸出樣例
輸入 #1
6 6 3 3
輸出 #1
6
說明/提示
對於 \(100 \%\) 的資料,\(1 \le n, m \le 20\),\(0 \le\) 馬的座標 \(\le 20\)。
C++程式碼
#include <iostream> #include <cmath> using namespace std; int main() { int n, m, u, v; cin >> n >> m >> u >> v; long long int a[n+1][m+1]; for (int i=0; i<=n; ++i) for (int j=0; j<=m; ++j) if (i == 0 && j == 0) a[i][j] = 1; else if (i==u&&j==v || abs(i-u)==1&&abs(j-v)==2 || abs(i-u)==2&&abs(j-v)==1) a[i][j] = 0; else if (j == 0) a[i][0] = a[i-1][0]; else if (i == 0) a[0][j] = a[0][j-1]; else a[i][j] = a[i-1][j] + a[i][j-1]; cout << a[n][m] << endl; return 0; }