lg-dp1

haozexu發表於2024-08-08

記憶化搜尋:

  • 記憶化

  • 壓縮 DP 狀態(一些期望 dp 裡會用)

  • 剪枝

遞推:保證前面的部分已經計算了


數位 dp

\([l,r]\) 之內滿足某種限制的數的個數,該限制應該是與數位有關係的。

帶不帶前導0取決於是否對統計答案造成影響。

字首和轉化:只有上界

  • 補充題:如果 lim=1 的時候前面都是與 r 相同的,這個時候是可以列舉轉移的,如果 lim=0,那麼我們知道前面已經確定的位數,就知道還有多少數可用,可以不確定出具體是什麼數,只要乘上係數就可以了。

狀壓 dp

  • 子集個數定理:對於 \(T\subseteq S\subseteq \{1,2,\dots,n\}\) ,不同的 \((S,T)\)\(3^n\)

  • 列舉子集:

    先減 1,去掉最後一個 1,然後再把後面賦值成與 i 後面相同的

  • 更加優秀的做法:一次加入一個元素,設 \(f[S]\) 是加入了 \(S\) 之後的最優情況,定義為 \((min\_group\_count,current\_rest\_V)\) ,在加入一個新的元素時,優先比較最小組數,然後比較當前最後一組剩餘大小。

  • 那個題可以卡過去,不過還是能夠繼續最佳化:我們可以一一確定每個格子,考慮到當前狀態只有最靠下面的輪廓是有效的,狀壓這個輪廓線即可轉移。

  • DP 套 DP:要儲存最長公共子序列的情況,我們可以儲存計算LCS的DP陣列,注意到該陣列差分為0/1,可以狀壓。

機率 dp

  • 由於只求 k,在第一個人開槍之後可以看成重新編號了,我們知道這種迴圈的機率,這樣計算可以直接計算出數列的極限。我們設 f[n][k] 表示 n 個人,要求編號為 k 的活著的機率。這裡有環(基環樹、樹等也可能使用,參見隨機遊走),考慮設一個主元,然後用該主元表示其他元。

  • 可以使用無窮級數求和證明

    證法2:令該期望為 \(x\) ,則有 \(x=p\times x+(1-p)\times(1+x)\) ,解得 \(x=1/p\)