質問の意味:ウサギは死に毎日生きている$ K $を持つようになった、それぞれの死は、出生$パイの$ $ I $ウサギの確率を持っています。ウサギの確率$メートルの$日の決意が死亡しました。
アイデア:
集合$ F [i]が$死のi日における完全なウサギの確率で、その答えは、[M] ^ k個の$ F $です。
だから、キー[i]は$ F $を求めています。
合計確率式であったの
$ Fを[I] = P0 + P1 * F [I-1] +のP2 * F [I-1] ^ 2 + ... + PN * F [I-1] ^ n個の$
それを理解する方法については式?P0は、ウサギの確率は彼が死んだ初日を終えています。p1が原因ウサギの死に、[I-1]その後、この場合の確率は、私が死ぬ日で終了、ウサギのうち、ウサギに生まれた最初のP1 *のFである独立した繰り返し時間なので、指数関数的に確率フォームを掛けました。
#pragma GCCの最適化(2) の#pragma G ++最適化(2) の#pragmaコメント(リンカー、 "/ STACK:102400000,102400000") の#include <ビット/ STDC ++ H> の#include <unordered_map> の#defineのrep(I、 、B)が(iは= int型、iが<= Bと; ++ i)は、 の#define DEP(I、B、A)(iはBを= int型のために、I> = A; - I) の#define CLR(A 、B)のmemset(A、B、はsizeof(A)) の#define PB一back の#define PII対<整数、整数> 使用して 名前空間STDを、 typedefの長い 長いLL。 LL RD() { LL、X = 0、F = 1。CHARCH = GETCHAR()。 一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - ')、F = - 1 ; CH = GETCHAR();} 一方(CH> = ' 0 ' && CH <= ' 9 '){X = X * 10 + CH- ' 0 ' ; CH = GETCHAR();} 戻りのx *のF。 } のconst int型 MAXN = 1010 。 const int型 INF = 0x3f3f3f3f; INTのN、M、K、T。 二重DP [MAXN]、F [MAXN]、P [MAXN]。 INT メイン(){ CIN >> T。 int型の猫= 1 ; 一方、(T-- ){ CIN >> N >> K >> M。 ダブルのres = 0 ; 担当者(I、0、N- 1 ){ scanf関数(" %のLF "、&P [I])。 } [F 1 ] = P [ 0 ]。 担当者(I、2 、M){ F [i]が= 0 ; 担当者(j、0、N- 1 ){ F [I]([I-F + = P [j] * POW 1 ]、J); } } のprintf(" ケース#1%のD:%.7f \ n "、猫++ 、POW(F [M]、K))。 } }