題目描述
棋盤上 aa 點有乙個過河卒,需要走到目標 bb 點。卒行走的規則:可以向下、或者向右。同時在棋盤上 cc 點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。
棋盤用座標表示,aa 點 (0, 0)(0,0)、bb 點 (n, m)(n,m),同樣馬的位置座標是需要給出的。
現在要求你計算出卒從 aa 點能夠到達 bb 點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
輸入格式
一行四個正整數,分別表示 bb 點座標和馬的座標。
輸出格式
乙個整數,表示所有的路徑條數。
輸入輸出樣例
輸入 #1
663
3
輸出 #1
6
說明/提示對於 100% 的資料,1 <= n, m <= 20,0≤ 馬的座標 ≤ 20。
我的思路
核心想法:每個點的路徑條數是該點左邊路徑條數加上上邊路徑條數
dp[i]
[j]= dp[i -1]
[j]+ dp[i]
[j -1]
;
要注意的是:陣列的邊界,給馬的控制點做標記時,要考慮邊界
if
(bx >=
0&& bx <=
20&& by >=
0&& by <=20)
bj[bx]
[by]=-
1;
當計算i – 0 時,只需加上他上邊的路徑條數,相同,j == 0,只需加上左邊的路徑條數。
continue;if
(i ==0)
dp[i]
[j]= dp[i]
[j -1]
;else
if(j ==0)
dp[i]
[j]= dp[i -1]
[j];
我的**
#include
using
namespace std;
int n, m, x, y, bx, by;
long
long bj[30]
[30], dp[30]
[30], z[8]
[2]=
,,,,
,,,}
;int
main()
bj[x]
[y]=-1
; dp[0]
[0]=
1;for(
int i =
0; i <= n; i++)}
cout << dp[n]
[m];
return0;
}
P1002 過河卒 動態規劃
傳送門 思路 搜尋tle了,只能dp了。dp i j dp i j 1 dp i 1 j 對於 點 i,j 只有 i,j 1 和 i 1,j 這兩種選擇,那麼可以推出狀態轉移方程 先定義dp 0 0 1 dp i j dp i 1 j dp i j 1 但如果這樣的話,以0,0為起點會出現點被覆蓋的...
P1002 過河卒 (動態規劃 遞推)
p1002 過河卒 動態規劃 遞推 題目描述 棋盤上a a點有乙個過河卒,需要走到目標bb 點。卒行走的規則 可以向下 或者向右。同時在棋盤上cc 點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,aa 點 0,0 0,0 b b點 n,...
洛谷P1002 過河卒(動態規劃)
棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過20的整數 同樣馬的位置座標是需要給出的。現在要求你計算...