问题如下:
Lazer Tag 由小组游戏组成,在整个游戏过程中,您会被分配固定数量的子弹(通常称为激光射击)。对目标敌人的每一次正确射击都会给你一分。
考虑一下一系列的命中和未命中,可以用“x”和“o”的形式表示,其中“o”代表命中,“x”代表未命中。假设系列的形式是“xxxoooxxxxooxxo”,那么您的最终得分将等于,
3^2 + 2^2 +1^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) 解决方案的工作原理?