codeves天梯 過河卒

2021-07-26 17:38:42 字數 1597 閱讀 6214

如圖,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

maxn=20;

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

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

var a,g:array [0..maxn,0..maxn] of int64;

n,m:longint;

procedure init;

var i,j,x,y:longint;

begin

readln(n,m,x,y);

fillchar(a,sizeof(a),0);

fillchar(g,sizeof(g),0);

for i:=1 to 9 do

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

begin

g[x+dx[i],y+dy[i]]:=1;

a[x+dx[i],y+dy[i]]:=0;

end;

end;

procedure search(x,y:longint);

begin

if (x=0) and (y=0)

then begin

a[x,y]:=1;

exit;

end;

if (x=0) and (y<>0) and (g[x,y]=0)

then begin

search(x,y-1);

a[x,y]:=a[x,y-1];

end;

if (x<>0) and (y=0) and (g[x,y]=0)

then begin

search(x-1,y);

a[x,y]:=a[x-1,y];

end;

if (x<>0) and (y<>0) and (g[x,y]=0)

then begin

if (g[x-1,y]=0) and (a[x-1,y]=0) then search(x-1,y);

if (g[x,y-1]=0) and (a[x,y-1]=0) then search(x,y-1);

a[x,y]:=a[x-1,y]+a[x,y-1];

end;

end;

begin

init;

search(n,m);

write(a[n,m]);

end.

codeves天梯 均分紙牌

有 n 堆紙牌,編號分別為 1,2,n。每堆上有若干張,但紙牌總數必為 n 的倍數。可以在任一堆上取若於張紙牌,然後移動。移牌規則為 在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上 在編號為 n 的堆上取的紙牌,只能移到編號為 n 1 的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。...

codeves天梯 合併果子

在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。...

codeves天梯 產生數

給出乙個整數 n n 10 30 和 k 個變換規則 k 15 規則 一位數可變換成另乙個一位數 規則的右部不能為零。例如 n 234。有規則 k 2 2 5 3 6 上面的整數 234 經過變換後可能產生出的整數為 包括原數 234534 264564 共 4 種不同的產生數 問題 給出乙個整數 ...