棋盤上 aa 點有乙個過河卒,需要走到目標 bb 點。卒行走的規則:可以向下、或者向右。同時在棋盤上 cc 點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。
棋盤用座標表示, aa 點 (0, 0)(0,0) 、 bb 點 (n, m)(n,m) ( nn , mm 為不超過 2020 的整數),同樣馬的位置座標是需要給出的。
現在要求你計算出卒從 aa 點能夠到達 bb 點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
輸入格式:
一行四個資料,分別表示 bb 點座標和馬的座標。
輸出格式:
乙個資料,表示所有的路徑條數。
輸入樣例#1:複製
6 6 3 3
輸出樣例#1:複製
6
結果可能很大!
#include #include #include using namespace std;
long long dp[25][25],map[25][25];
void mark(int x,int y)
int main()
else if(i==0 && j!=0)
else if(i==0 && j==0);
else
if(map[i][j]) dp[i][j]=0;//如果是馬控制點,直接清空這個點
}} cout<} return 0;
}
洛谷P1002過河卒(dp)
第一次自己做出了一道簡單dp題目,發篇部落格紀念一下哈啊哈哈 思路 先找到狀態轉移方程,根據dp定義,把大問題所求變成乙個個子問題,我要知道某個位置的路徑數目,那麼我要知道,到達這個位置之前每乙個位置能有多少種方法到達,那麼我每乙個位置的路徑數目與上乙個位置的路徑數目有關 上乙個位置無非是左邊一點和...
洛谷P1002 過河卒 DP
不需要搜尋,很容易就能求出轉移方程。f i j 從兩個方向即f i 1 j 和f i j 1 轉移過來,但是要注意邊界情況,因為下標從0開始會有負數的情況,所以f整個平移一位,f 1 1 可以從f 1 0 轉移過來。另外注意馬所在的位置也需要被標記。結果很大要開long long。include u...
洛谷 P1002 過河卒
棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過20的整數 同樣馬的位置座標是需要給出的。現在要求你計算...