題目描述
問題源自bwt壓縮方法。詳見http://acm.pku.edu.cn/judgeonline/problem?id=1147。
該問題就是bwt壓縮方法的逆過程。關於bwt壓縮方法見http://en.wikipedia.org/wiki/burrows%e2%80%93wheeler_transform。
解題過程
有的時候感覺智商不夠用。如果沒有答案估計我是想不出答案了。
我解題過程寫了3套**。
第一套**
按照wiki上說的建立乙個表,問題的規模是n=3000,表的規模是n*n,所以空間滿足需求。這裡面有乙個排序的過程,我用stl的sort,就是快速排序,問題的規模是n=3000,每次排序平均需比較1000左右的字元,快速排序的複雜度為n*lgn,所以總的時間為o(n*n*lgn*n/2)。所以可想而知,cpu越要計算10^10,當然是超時了。
第二套**
發現排序的時候有個規律,在第i步之前,原來的表是從小到大排序好的,利用這個規律改進排序方法,排序用o(n)就可以了,所以總共的時間複雜度是o(n*n), 最後空間是9000k,時間是900ms.
第三套**
繼而發現表都不用建立,那麼填充表的過程也可以省略,最終空間是180k,時間是100ms.
改進所帶來的樂趣,只有努力ac的人才能體會!沒有最快,只有更快!
**
POJ 3254 Corn Fields 狀態壓縮
具體見注釋 include include include include include include include include include include include include using namespace std define mod 100000000 int n,m...
POJ 3654 Corn Fields 狀態壓縮
最近我總是輾轉反側,難以入眠,對我們曾有過的願景,浮想聯翩。但親愛的,我早已在內心深處祈禱著,祈禱自己不再迷失於金錢的追逐中。ok,刷動態規劃題。題意如下 n行m列 乙個矩陣裡有很多格仔,每個格仔有兩種狀態,可以放牧和不可以放牧,可以放牧用1表示,否則用0表示,在這塊牧場放牛,要求兩個相鄰的方格不能...
poj3254Corn Fields 狀態壓縮dp
理解都在 注釋裡 題目直通車 include 狀態壓縮 includeconst int maxn count 377 10 count的值是377 const int mod 1e8 int n,m int count int dp 15 maxn count dp 最終答案存在 dp n i i...