効果の件名:
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 }