後方確率DPの期待

効果の件名:

0:00開始点から開始点nに達し、各サイコロを進行、当然のことながら、いくつかは、前方にいくつか投げ、X-飛行することにより、対応するチャネルへの直接アクセスを6 1,2,3,4,5,6例を投げることができます点y、X <Y、到達点を計算する、またはN nよりもより

あなたがサイコロを投げるしたい回数のポイント数学的期待

DP [i]は数学的期待値は、の終わりに達しているので、ある点からサイコロを投げた後、I + 2、I + 3、I + 4、I + 5、I + 6つの6点をI I + 1に到達します

次に同じに達した後の6点の数学的期待値は、その後、DP [i]はDP [I + 1] * 1 / 6.0 + DP [I + 2] * 1 / 6.0 +は、DP = [I + 3] * 1 / 6.0 + DP DP [I + 4] * 1 / 6.0 + [I + 5] * 1 / 6.0 + DP [I + 6] * 1 / 6.0 + 1

判断が値DPに直接与えることができるならば、直接ヒット飛ぶことがあり、DPは、上述の処理動作を実行しません。

1の#include <cstdioを>
 2の#include <アルゴリズム>
 3の#include <math.h>の
 4の#include < 文字列・H>
 5  使って 名前空間STDを、
6  のconst  int型 MAXN = 1E5 + 10 7  INTの一致[MAXN]。
8  ダブルDP [MAXN]。
9  ボイドのinit()
 10  {
 11      のmemset(DP、0はsizeof (DP))。
12      のmemset(一致、0はsizeof (一致))。
13  }
14  のint main()の
 15  {
 16      int型N、M。
17      一方(のscanf(" %d個の%のD "、&​​N、&M)=!EOF){
 18          であれば(N == 0 && m個の== 0ブレーク19          のinit();
20          のためにint型 I = 1 ; I <= M Iは++ ){
 21              int型A、B。
22              のscanf(" %D%dの"、&​​、&B)。
23              試合[A] = Bと、
24         }
 25          のためのINT I = N- 1、I> = 0 ; i-- ){
 26              であれば(一致[i])とDP [i]は= DP [マッチを[I]]。
27              {
 28                  のためにINT J = 1 ; J <= 6 ; J ++ ){
 29                      、DP [I] + = DP [J + I] / 6.0 30                  }
 31                  [I] + = DP 1 32              }
 33          }
 34          のprintf(" %.4fする\ n、DP [ 0 ]);
 35      }
 36      リターン 0 ;
 37 }

 

おすすめ

転載: www.cnblogs.com/pangbi/p/11565163.html