第一次自己做出了一道簡單dp題目,發篇部落格紀念一下哈啊哈哈
思路:先找到狀態轉移方程,根據dp定義,把大問題所求變成乙個個子問題,我要知道某個位置的路徑數目,那麼我要知道,到達這個位置之前每乙個位置能有多少種方法到達,那麼我每乙個位置的路徑數目與上乙個位置的路徑數目有關 ,上乙個位置無非是左邊一點和上邊一點即縱座標+1和橫座標-1。
細節:這裡我是把圖形倒過來的,即(0,0)是在左下角的,看成座標系,題目給的橫座標相應的變成了座標系裡的縱座標。
還有就是第乙個if,這是用來搞馬的控制點的,就是說我這個點如果是馬的控制點,那我根本不能到達,所以把這個點的路徑數目賦值為0
dp[0][0]=1,因為你出發點就是(0,0),那你不動,不就是有一種方法到達(0,0)嘛
#include
long
long dp[
200]
[200];
long
long
abs(
long
long a)
intmain()
else
if(i==
0&&j==0)
else
if(i-
1<0)
else
if(j-
1<0)
else
if(j>=
1&&i>=1)
}}printf
("%lld\n"
,dp[a]
[b])
;return0;
}
洛谷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的整數 同樣馬的位置座標是需要給出的。現在要求你計算...
洛谷P1002過河卒
dp水題,我都會做 我們考慮地圖上i,j的位置可以怎麼過來,因為卒只能向下或向右,所以當前位置只能由它的上方或左方轉移過來,所以f i j f i 1 j f i j 1 然後考慮邊界情況,沿著上沿和左沿只能向乙個方向走,所以f i 0 0,f 0 i 0,這是不考慮有馬的情況,當馬加入圖中後,我們...