問題は次のとおりです。
レーザー タグはグループ プレイで構成されており、ゲーム全体で決まった数の弾丸 (一般にレーザー ショットとして知られています) が割り当てられます。ターゲットの敵を正しく撃つたびに、1 ポイントが与えられます。
「x」と「o」の形で表すことができる一連のヒットとミスを考えてみてください。「o」はヒットを表し、「x」はミスを表します。シリーズが「xxxoooxxxxooxxo」の形式であると仮定すると、最終的なスコアは次のようになります。
3^2 + 2^2 +1^2
つまり、ゲーム プレイ全体での連続ヒットの最大数の 2 乗を合計します。j 番目のショット (1≤j≤n) が正しくヒットする確率は P(j) です。簡単に言えば、j 番目のターンでシリーズで「o」を取得する確率は P(j) です。ラウンド終了時に予想スコアを計算する必要があります。
メモ化を使用してこれの O(n^2) ソリューションを理解できますが、質問には O(n) ソリューションが必要です。O(n) ソリューションを見たことがありますが、理解できません。O(n) ソリューションは次のとおりです。
for(i = 1; i <= n; i++)
dp[i] = (dp[i-1] + p[i-1]) * p[i];
for(i = 1; i <= n; i++)
ans+=2 * dp[i] + p[i];
ここで、p[i] は i 番目のターゲットに命中する確率です。O(n) ソリューションの仕組みを説明できる人はいますか?