BZOJ4872 分手是祝願

2022-03-26 00:30:37 字數 2191 閱讀 2459

有n 個燈,每個燈有兩個狀態亮和滅,我們用 1 來表示這個燈是亮的,用 0 表示這個燈是滅的,操作第 i 個開關時,所有編號為 i 的約數(包括 1 和 i)的燈的狀態都會被改變,即從亮變成滅,或者是從滅變成亮。b 可以通過操作小於等於 k 個開關使所有燈都滅掉,那麼他將不再隨機,直接選擇操作次數最小的操作方法(這個策略顯然小於等於 k 步)操作這些開關。b 君想知道按照這個策略(也就是先隨機操作,最後小於等於 k 步,使用操作次數最小的操作方法)的操作次數的期望。

第一行兩個整數 n, k。

接下來一行 n 個整數,每個整數是 0 或者 1,其中第 i 個整數表示第 i 個燈的初始情況。

1 ≤ n ≤ 100000, 0 ≤ k ≤ n;

輸出一行,為操作次數的期望乘以 n 的階乘對 100003 取模之後的結果。

講課的ppt裡只是簡單的寫了式子,都寫了就不需要我講了啊。對於一些我沒在ppt裡寫的東西,可能講得太快了沒聽清,更博造福人類啦。

每操作乙個燈對應的燈編號的約數也會改變狀態,自然而然會想到:

從編號較大的往編號較小按開關。

這樣肯定是最優的。

感性理解:

通俗點講就是,這個編號較大的開關你遲早都要按,產生的影響又是一定的,早點按確定狀態,可以得出最優解所需按的開關集合。

理性認識

對於每個情況下,我們比最小次數多出來的操作次數是怎麼來的。

對於每個開關,假如它是我們通向成功路(最小次數的方案)上的必經之路(最小次數的方案需要操作的開關集合裡的開關),我們為什麼花時會更多(次數多於最小次數),當然是因為你走了彎路(操作了不在最優集合裡的開關),當然也不是不可以挽回的,因為你最終總是要到達終點(到達最終狀態),你可以選擇原路返回(再按一次按錯的開關)或者繞更遠的路繞到正道上(通過操作按錯開關所影響的開關來挽回局面)。當然如果需要更快的返回正道,保證最小的步數當然是原路返回啊。

我能說概率與期望題很多都是

dp嗎,否則就一臉不可做啊。

本題最值得考慮的問題應該是為什麼要這樣dp,這個dp的狀態設定還是比較特別的,我ppt裡一句帶過,問問題的時候也沒有人問。

可能大家都懂吧,這題直接秒了,我太弱了,那我再多想想也多講講。

在每個狀態的情況下,按不同的燈可能導致的結果是不一樣的。

為什麼導致的結果不同???

本題結束遊戲的最小步數是確定的,最小步數的方案中需要按哪些點也是確定的,這給這些點帶來了乙個新的性質:在或不在這個最小方案所要按的點集中。

不懂的話看上面那個牽強的比喻。

用別的性質,比如:當前處理的點的編號???

設f[i]為操作到第i個點,剩下要操作?個點的期望步數。

但本題將最小次數及方案確定之後,你會發現相鄰的點的編號是無需轉移也沒法轉移的,因為最小方案需要操作點我們已經求出,這使得與之編號相鄰這個性質不再具有意義,也無法轉移狀態。這樣設定狀態也沒有階段性,根本不能dp。

誒,說了這麼多,我們到底怎麼dp啊???

設f[i]為由最小次數為i到結束所需的期望步數。

f[i] = i/n*f[i-1] + (n-i)/n * f[i+1] + 1;

f[n] = f[n-1] + 1;

將所有點分成兩個集合:最優情況需要按的開關集合,和其他開關集合。

我們有i/n的概率按到第乙個集合裡的開關,狀態轉移到了f[i-1];

另有(n-i)/n的概率按到第二個集合裡的開關,狀態轉移成f[i+1];

我直接看神犇們的部落格看的得有點懵逼啊。

寫題的莫非智商超群或看了題解無緣無故誰會差個分誒。

回到這個式子本身,我們為什麼會差分啊???

由於概率i/n+(n-i)/n = 1等於左邊f[i]的係數,學過數列的孩子都有一種想要移項的衝動啊。(構數列,尋項標,對齊項標,構造新數列,

balabalabala 這題跟這個好像沒什麼關係qwq)我們移個項  => i/n * g[i] = (n-i)/n*g[i+1] + 1;

g[i] = (n-i)/i * g[i+1] + n/i;

g[i] = ((n-i)*g[i+1] + n)/i;

f[i]:這個狀態設定的是當前到結束的期望步數,最小步數為i

怎麼搞一下把它簡化啊:我們思考如何將上面那個式子中涉及到的相鄰三項的遞推簡化成相鄰兩項,設定g[j]的狀態為從最小步數j到最小步數j-1的期望步數,則有:

f[i] =sigama(1<=j<=i)g[j]。然後把這個式值帶入之前的狀態轉移式化簡一下,具體戳部落格。同樣可以得到關於g[i]的方程。

bzoj4872 分手是祝願

zeit und raum trennen dich und mich.時空將你我分開。b 君在玩乙個遊戲,這個遊戲由 n 個燈和 n 個開關組成,給定這 n 個燈的初始狀態,下標為 從 1 到 n 的正整數。每個燈有兩個狀態亮和滅,我們用 1 來表示這個燈是亮的,用 0 表示這個燈是滅的,遊戲 的...

4872 Shoi2017 分手是祝願

4872 shoi2017 分手是祝願 time limit 20 sec memory limit 512 mb submit 153 solved 109 submit status discuss description zeit und raum trennen dich und mich....

bzoj 4872 Shoi2017 分手是祝願

4872 shoi2017 分手是祝願 time limit 20 sec memory limit 512 mb submit 138 solved 97 submit status discuss description zeit und raum trennen dich und mich.時...