1. 程式人生 > >【BZOJ-2201】彩色圓環

【BZOJ-2201】彩色圓環

題目描述

小 A 喜歡收集寶物。一天他得到了一個圓環,圓環上有 N 顆彩色寶石,閃閃
發光。小A很愛惜這個圓環,天天把它帶在身邊。
一天,小 A 突然發現圓環上寶石的顏色是會變化的。他十分驚訝,仔細觀察這
個圓環後發現,圓環上寶石的顏色每天變化一次,而且每顆寶石的顏色都等概率地
為特定的M種顏色之一。小A發現了這個祕密後,對圓環更是愛不釋手,時時刻刻都
在研究。
又經過了一段時間,小 A 發現因為圓環上寶石的顏色不斷變化,圓環有時會顯
得比其他時候更美麗。為了方便比較,小 A 這樣定義圓環的“美觀程度” :
1. 設圓環上相同顏色的寶石構成的連續段長度分別為a 1 , a 2 , …, a n ;
2. 定義圓環的“美觀程度”
R = a 1 * a 2 * … * a n 。
現在小 A 想知道,在上述前提下,圓環的“美觀程度”的期望值 E(R)是多少。
因為如果知道了 E(R),他就可以判斷每天變化出的新圓環是否比一般情況更美麗。
說明:“美觀程度”的期望值即為對每種可能的圓環狀態的“美觀程度”與其
出現概率的乘積進行求和所得的值。

題解

一道概率dp題。
先來看看是鏈的情況:
dp[i][j]ij
但是發現這樣子不好轉移。當加入一個不與前面同色的寶石時不好搞。
那麼我們其實可以先就確定哪一段是同色的。
dp[i]ij(i+1)j
i

P[i]
那麼就有dp[j]+=dp[i]P[ji](ji1)(m1)(注意這裡一定寫成+=,概率dp的期望都是要累加的)
但是為什麼最後要乘上(m-1)而呢?
因為前面已經有一種顏色了,這裡實際上你有(m-1)種顏色的選擇,並且每一種顏色的地位相同,可以輪換。

那麼鏈的情況就處理完了,再來看看環。
我們肯定是要破環成鏈的,關鍵看怎麼處理首尾相連時的貢獻。
既然每次只有當首尾顏色相同時才有貢獻,那麼不妨給狀態增加一維:

dp[i][2]i