棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則:可以向下、或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。
棋盤用座標表示,a點(0, 0)、b點(n, m)(n, m為不超過20的整數),同樣馬的位置座標是需要給出的。
現在要求你計算出卒從a點能夠到達b點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
輸入格式:
一行四個資料,分別表示b點座標和馬的座標。
輸出格式:
乙個資料,表示所有的路徑條數。
輸入樣例#1:
6 6 3 3輸出樣例#1:
6結果可能很大!
題解:這題題意不明,最後調了半天,,,(控制點根本沒說明白是什麼意思啊)。。。
不過特別逗,我上來竟然寫的是bfs爆搜!。。。。。無語了。。。
**之後寫了一發記憶化,發現我是從(0,0)開始搜的= =
完了窩的**能力真的餵狗咯。。。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8#define pau putchar(' ')
9#define ent putchar('\n')
10#define mse(a,b) memset(a,b,sizeof(a))
11#define ren(x) for(ted*e=fch[x];e;e=e->nxt)
12#define til(x) for(int i=1;i<=x;i++)
13#define all(x) for(int j=1;j<=x;j++)
14using
namespace
std;
15const
int maxn=20+10;16
const
int dx=;
17const
int dy=;
18const
int cx=;
19const
int cy=;
20bool
vis[maxn][maxn];
21long
long
dp[maxn][maxn];
22long
long ans=0;int
n,m;
23long
long dfs(int x,int
y)return res=tmp;28}
29 inline int
read()
34 inline void write(long
long
x)if(x<0)putchar('
-'),x=-x;
36int len=0;static
long
long buf[20];while(x)buf[len++]=x%10,x/=10;37
for(int i=len-1;i>=0;i--)putchar(buf[i]+'
0');return;38
}39intx,y;
40int
main()write(dfs(n,m));
46return0;
47 }
洛谷 1002 過河卒
棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過20的整數 同樣馬的位置座標是需要給出的。現在要求你計算...
洛谷 1002 過河卒
雖然這道題目的標籤上有高精,但是用long long int就能ac 看到普及 的難度,本蒟蒻二話不說寫了dfs,結果.只拿了40分,只好改變思路寫了遞推 個人認為dp 遞推 dfs 未ac,無注釋 includeusing namespace std intmx,my,ex,ey bool v 2...
洛谷 P1002 過河卒
棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過20的整數 同樣馬的位置座標是需要給出的。現在要求你計算...