(昨天的)codevs天梯過河卒 簡短的棋盤dp

2021-07-26 13:00:56 字數 1406 閱讀 5934

題目:

如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則:可以向下、或者向右。同時在棋盤上的任一點有乙個對方的馬(如上圖的c點),該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點(圖中的p1,p2 … p8 和 c)。卒不能通過對方馬的控制點。

棋盤用座標表示,a 點(0,0)、b 點(n,m)(n,m 為不超過 20 的整數,並由鍵盤輸入),同樣馬的位置座標是需要給出的(約定: c不等於a,同時c不等於b)。現在要求你計算出卒從 a 點能夠到達 b 點的路徑的條數。

1<=n,m<=15

**:const

dx:array [1..8] of longint=(2,1,-1,-2,-2,-1,1,2);

dy:array [1..8] of longint=(1,2,2,1,-1,-2,-2,-1);

maxn=50;

varf:array [-1..maxn,-1..maxn] of longint;

flag:array [-1..maxn,-1..maxn] of boolean;

n,m,x,y:longint;

procedure init;

vari,j:longint;

begin

readln(n,m,x,y);

fillchar(flag,sizeof(flag),true);

flag[x,y]:=false;

f[0,0]:=1;

for i:=1 to 8 do

if (x+dx[i]>=0) and (x+dx[i]<=n) and (y+dy[i]>=0) and (y+dy[i]<=m) then

flag[x+dx[i],y+dy[i]]:=false;

for i:=1 to n do

flag[i,-1]:=false;

for i:=1 to m do

flag[-1,i]:=false;

end;

procedure main;

vari,j:longint;

begin

for i:=0 to n do

for j:=0 to m do

if flag[i,j] and ((i<>0) or (j<>0))then

begin

if flag[i-1,j] and (f[i-1,j]<>0) then

inc(f[i,j],f[i-1,j]);

if flag[i,j-1] and (f[i,j-1]<>0) then

inc(f[i,j],f[i,j-1]);

end;

writeln(f[n,m]);

end;

begin

init;

main;

end.

codeves天梯 過河卒

如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的控制點。棋盤用座標表示,...

CodeVS1010 過河卒 解題報告 DP

description 如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的...

(昨天的)codevs天梯 逃跑的拉爾夫 dfs

題目 年輕的拉爾夫開玩笑地從乙個小鎮上偷走了一輛車,但他沒想到的是那輛車屬於警察局,並且車上裝有用於發射車子移動路線的裝置。那個裝置太舊了,以至於只能發射關於那輛車的移動路線的方向資訊。編寫程式,通過使用一張小鎮的地圖幫助警察局找到那輛車。程式必須能表示出該車最終所有可能的位置。小鎮的地圖是矩形的,...