的問題如下:無法理解一個DP的解決方案
拉澤標籤由一個羣戲,你在哪裏整場比賽期間指派子彈(俗稱激光槍)的固定數量。每個對目標敵人進行正確的射擊都會給你一分。
考慮一下可以用「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)解決方案的工作原理嗎?
您發佈的解決方案不正確。這可能是你無法理解它的原因之一。只需運行一次模擬,將您的隨機結果平均數百萬次,然後您會看到它會給出不同的結果。 – Chill
@Chill解決方案是正確的。這是問題鏈接[http://www.codechef.com/TCFST13/problems/TCFST05/],我給出的解決方案是其中一個可接受的解決方案。 – SHB
然後,我的模擬必然會出現問題。檢查出來,讓我知道如果你看到任何問題。 http://pastebin.com/NHWgK1fZ – Chill