計數pd就是emm感覺求那種什麼路徑和的就是計數那一類的,再概括一下就是可以不用其他操作直接將它相鄰或者說符合要求的**求和,就是下乙個位置的值。
回到這題:
用動規很好做。
我們想要知道(0,0)到終點的位置的路徑,只需要知道終點已左終點已下的路徑為多少就行了。
dp[i][j]:(0,0)到(i,j)位置的路徑和。
轉移方程:dp[i][j] = dp[i-1][j]+dp[i][j-1];
初始化,將第一行第一列全初始化為1.
狀態壓縮:由於每次都是使用的左和上方的值,那麼我們可以將陣列壓縮為一維。
class
solution
}return dp[n-1];}}
用遞迴+備忘錄的寫法:
遞迴可讀性是真的強,要想知道到m,n點的路徑和,那麼我們就得知道m-1,n和m,n-1的路徑和。然後找到結束條件,我們知道第一行第一列肯定都是只有1種的,這樣結束條件也找到了,為了避免重複計算,我們再使用乙個備忘錄儲存已經計算過的值。
這題與上題的區別在於多了障礙,因為無法停留於障礙點,所以障礙點的路徑和為0.不過初始化時需要注意,第1行和第1列如果中間有障礙,那障礙之後的都不可達。
其實看到二叉樹的題就想用dfs,備忘錄就用來記錄子樹的種類。
二叉搜尋樹,就是需要左子樹小於根,根小於右子樹。
假設元素只有0個,則只有1種可能
假設元素只有1個,則只有1種可能
假設元素只有2個,則只有11+11種可能
假設元素只有3個,則只有12+11+12種可能
假設元素只有4個,則只有種1 x(1 x元素為3可能)+1x(元素為1x元素為2)+1x(元素為1x元素為2)+1 x(元素為31)可能
如果元素為n,則有(1x元素n-1)+(元素為n-2x元素為1)…(元素為n/22)+…+(元素為n-1x1);
dp陣列就為dp[i]元素數量為i時的種類數.
這個不就是把規則改為了前三個數之和嘛
這題被劃分為遞推dp,倒也不用多解釋,感覺就跟數學裡學那種遞推式差不多。之前做那個**跳樓題就是對這種題拓展情況
!!!!這個不是那個馬過河還是啥子題的感覺嘛
按下n個數字可以等價為跳n-1次
想要知道跳n-1次可能的組成情況,那麼就需要知道跳n-2次情況。由於起始點不同所以永遠不會有重複的情況,而且數字5永遠其他點跳不到也5也跳不出去,僅能作為長度為1時的起始位置。
畫一下圖大概知道各個狀態的轉移方式,請將所有的單箭頭想成雙向箭頭。
看圖可知,根據狀態可轉移的路徑數和可轉移到的路徑位置,可分為4種狀態:
無論哪個狀態無非就是在這些狀態間轉換,可以轉換的路徑數,即為當前可能.
狀態可由 2個方向轉換得來
狀態可由+*2
可由+可由*2
那兩個方向如何理解呢?
比如狀態
當狀態想轉移到4狀態時,兩個方向都是被允許的,所以有兩個方向。
求得所有的狀態數之後,再將對應狀態的數字數量x狀態數即可。
class
solution
long ans =
(dp[0]
+(dp[1]
<<1)
%mod+
(dp[2]
<<2)
%mod+
(dp[3]
<<1)
%mod)
%mod;
return
(int
)ans;
}}
遞推DP 加深
zoj 3747 題意 給n個士兵排隊,每個士兵三種g r p可選,求至少有m個連續g士兵,最多有k個連續r士兵的排列的種數。都轉化為至多的士兵連續的個數。令集合a 集合b c a b 在轉化要如何求 至多x個g士兵連續,至多y個士兵連續 dp i 0 至多i個g 的方案數 dp i 1 至多i個r...
計數dp小結
序 除了剛開始的看了幾道題的題解,後來也自己肛出了幾道 剩下不可做的題不也沒做嗎 這些題目最大的特點是在於需要自己構造狀態,這往往會成為一道題的最大卡點 窮舉表示水不到幾分 題目選講 e 如果直接模擬,複雜度為k n2既然每一步只能往上下或往左右走,那麼我們可以把題目分解為在x軸上行走k步與在y軸上...
計數DP 種樹
題目描述 事實上,小x邀請兩位奆老來的目的遠不止是玩鬥地主,主要是為了抓來苦力,替他的後花園種樹 小x的後花園是環形的,他想在花園周圍均勻地種上n棵樹,但是奆老花園的土壤當然非同尋常,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。小x最喜歡3種樹,這3種樹的高度分別...