1 / * * 2 dpが所望のタイトルを見つけます。 3 質問の意味は:ソフトウェアサブシステムをね、バグのn種類を生成します。 4 人が1日にバグを発見し、バグはバグのいくつかの種類に属し、サブシステムで発生します。 5 nは求めるバグのすべての種類、および各サブシステムの発見のバグを見つけ、その日数ことを期待しています。 6 こと注:サブシステムの確率で出現したバグの数が無限大であるので、バグを見つけるには、1 / Sであり、 7 特定のタイプに属する確率が1 / Nです。 8 解決策: 9 DP [i] [j]は私を発見したバグを示し、日数の所望の目標状態を達成するために、j番目のシステムに存在しています。 10 明らかに、DP [n]は[S] = 0、 目標に達しているからです。DP [0] [0]我々の要求に答えています。 11 DP [j]は、以下の4つの状態に変換することができる[I]: 12である DP [i] [j]がバグに属するバグシステムi番目とjがで発見されたことが分かっ 13である DP [I + 1である。] [J]が見つかりバグはバグの新しい種類に属しているが、Jシードシステムに属しているが発見した 14 DP [I] [J + 1 ] バグがI-バグに属する発見されたことがわかったが、新しいサブシステムに属している 15 DP [私は+ 1] [+ J. 1]新しいバグが新しいバグに属し発見し、サブシステム 16 これら四つの確率は以下の通りであった: 17 P1 * I = J /(S * N-) 18は P2 =(ニッケル)* J /(S * N-) 19の。 P3 =私は/(SJ)を*(N * S) 20は、 P4 =(ニッケル)*(SJ)/(N * S) 21であり、 別の所望の部分を複数に分解することができる発生のサブ所望の確率、すなわち、E(AA + bBで+の重みの加重和を希望... )= AE(A)-bE +(B)+ ... 22であり 、したがって: 23である DP [I、J] * DP = P1 [I、J] + P2 * DP [I + 1、J] + P3 * DP [ I、J + 1] + P4 * DP [I + 1、J + 1] + 1、。。。。 24 順番は次の通りであった: 25 DP [I、J] =(1 + P2 * DP [I + 1、J] + P3 *。 DP [I、J + 1] + P4 * DP [Iは+ 1、J + 1])/(1-P1) 26れます =(N * S +(NI)* jは*のDP [I + 1、j] + i *が(SJ)* DP [I、J + 1] +(NI)*(SJ)* DP [I + 1、 J + 1])/(N * S - iがjは*) 27 * * / 28の#include <cstdioを> 29の#include <iostreamの> 30 31 使って 名前空間STDを、 32 33 二重 DP [ 1005 ] [ 1005 ]。 34 35 のint main()の 36 { 37 int型N、S、NS。 38 39 CIN >> N >> S。 40の NS = N * S。 41 DP [n]は[S] = 0.0 。 42 以下のために(int型 I = N; I> = 0 ; i-- ) 43 のための(INT J = S; J> = 0 ; j-- ) 44 { 45 であれば(I == N && jは==秒)続けます。 46 DP [I] [J] =(NS +(NI)* jは*のDP [I + 1 ] [J] + i *が(SJ)* DP [I]、[J + 1 ] +(NI)*(SJ)* DP [I + 1 ] [j + 1 ])/(NS -私は* j)を。 47 } 48 のprintf(" %.4lfする\ n "、DP [ 0 ] [ 0 ])。 49 50 リターン 0 ; 51 }