1. 程式人生 > >概率dp基礎~~總結~~慢慢更新

概率dp基礎~~總結~~慢慢更新

概率dp是一類求期望/概率的題目 簡單總結一下做法 對於求期望 1.先將狀態定義出來 2.然後對於每一個狀態uu,考慮他可能的下一個狀態vv,於是從uuvv連一條概率為puvp_{uv}的邊。於是寫出一個方程

  • dp[u]=(dp[v]p[u][v])+1dp[u]=(\sum{dp[v]*p[u][v]})+1

  • 假如這是一個DAG,那麼這是個水題,倒著推回去就結束了。

  • 假如不是一個DAG,那麼可能會有下面這些東西

    • 自環
    • 一條連回某個固定點的邊
    • 一條連回根據當前點確定的某個點的邊
    • 更多。。。
  • 那麼一般思路是要轉化成一個DAG,在寫出方程後:

    • 自環:移項,消掉
    • 把那些不和諧的邊拆出來,設一個引數方程:
    • dp[i]=A1[i]dp[f1(i)]+A2[i]dp[f2(i)]+...An[i]dp[fn(i)]+B[i]dp[i]=A_1[i]dp[f_1(i)]+A_2[i]dp[f_2(i)]+...A_n[i]dp[f_n(i)]+B[i]
    • 然後把這一坨東西丟進剛開始寫出的那個方程的右邊,把dp[v]dp[v]都代換掉,就會寫出來一個引數為ii的引數方程,接下來問題轉換為求At[i]A_t[i]
      ,看一下同類項,就可以把引數的遞推式寫出來。

對於求概率,類似期望,不過要正著推;比較好考慮的的一個原因是結束點到結束點的期望肯定是零,而最初狀態的概率一般是好算的。