GDOI模擬 裝飾

題目大意

有一個2M 的綵帶,綵帶的每個格子都可以染上紅色,藍色,綠色中的一種顏色,一個綵帶被稱爲合法的,當且僅當
1. 相鄰兩個格子的顏色不同
2. 對於每個2*2的小矩陣三種顏色都要出現
3. 整個綵帶上有R 個紅色格子,B 個藍色格子,G 個綠色格子。

給定M,R,B,G ,求可能的合法綵帶數。對109+7 取模。

數據範圍

R+B+G=2M,0M1000000

題解

我們不妨設Ai 表示第i 列沒有出現的顏色,且滿足AiAi1 。那麼很顯然地,假如我們確定了第一列的狀態,以及所有的Ai ,我們就唯一確定了這條綵帶。因此,我們把原問題轉化爲給一個長度爲M 的序列染上三種顏色,相鄰格子顏色不能相同,並且每種顏色有數量限制。

考慮枚舉A1 ,設X 爲開頭顏色的數量,Y,Z 爲剩下兩種顏色的數量。假如所有開頭顏色確定了其在序列中放的位置,那麼剩下的格子就要被分爲X 段或X1 段,X1 段是因爲開頭顏色可能可以放在結尾。設G 爲最終分成的段數。對於每一段,我們分其長度爲偶數或奇數兩種情況考慮。

我們可以枚舉最終有e 段偶數,對於每段偶數段,必然是YZYZYZZYZYZY 的形式,因爲需要保證相鄰不相同。因爲每一段都不能是空的,因此我們可以先給每段偶數段都先加入一個Y,Z ,那麼這兩種顏色剩下的數量就是Ye,Ze

對於奇數段的,假如我們確定了開頭是Y 還是Z ,那麼接下來還是類似於偶數段,只是形式已經確定了。假設最終有oy 段奇數段開頭爲Y ,oz 段爲Z ,那麼我們可以列出方程組
oy+oz=Ge
yoy=zoz

對於第二條等式,是因爲你除了開頭以外總是要保證Y,Z 相鄰,那麼數量自然相同。那麼我們就可以解出oy,oz 了。

接下來考慮e 段爲偶數的貢獻就是
(Ge)(Geoy)2e(yoye+g1g1)

第一條式子就是從G 段中選出e 段偶數段,接下來就是從Ge 段奇數段中分配oy 段給Y ,然後對於每段偶數段,都可以選擇Y 開頭或Z 開頭,因此是2e ,最後一項是統計還剩下yoyeY ,要把他們分配到g 段中,注意每往一段中加入一個Y ,必然要伴隨一個Z ,因此只需要考慮Y 的分配即可。並且因爲我們一開始已經往每一段中加入了一些YZ ,所以最終分配時允許某一段分配爲空,這就是一個擋板問題。

最終時間複雜度就是O(N) ,空間複雜度也是O(N)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章