DTOJ 4747. 神祕代碼

題意

Hunt僞裝成Fitz的律師並將Fda從牢房中解救了出來。

通過城市監控,Fitz找到了綁架Coulson他們的人-Enoch.

在Enoch的家裏,Fitz看到了牆上的神祕代碼其中有一個01串引起了Fitz的注意。

根據周邊的神祕文字,Fitz瞭解到這個。這個01串是從一個排列得來的!

具體的,這是一個長度爲 n1n-1 的01串,假設這個01串是從某個 1n1 \cdots n 的排列 aa 得來的,01串的第 ii 個字符是1 表示 ai=2ai+1a_i=2a_{i+1} 或 $ a_{i+1}=2a_i0,是0則表示a_i \neq 2a_{i+1}$ 且 $ a_{i+1} \neq 2a_i$

爲了找到更深的祕密,Fitz決定計算出有多少種排列是符合這個01串的。

由於答案可能很大,請將答案對 109+710^9+7 取模後輸出。

對於測試點1-6,n20n \le 20

對於測試點7-10,保證給定的01串全都是0

對於測試點10+i (1i101 \le i \le 10) , n=20+2in=20+2i

對於所有數據,n40n \le 40

題解

考場上想過把兩倍的關係轉到樹上,但之後一直在往O(2n/2)O(2^{n/2})的做法想,遂自閉。
先考慮在樹上的關係怎麼用,對於一段1再加一個0,這些位置必須是樹上連續的一條鏈按照兩種方向填入,且下一個不能接着填。這時候就會覺得如果直接搜索肯定有很多狀態沒用,事實上確實跑得很快,於是記憶化一下即可。

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