第九次CCF CSP認證試題
阿新 • • 發佈:2018-12-27
試題編號: |
4 |
試題名稱: |
壓縮編碼 |
時間限制: |
3.0s |
記憶體限制: |
256.0MB |
問題描述: |
問題描述 給定一段文字,已知單詞a1, a2, …, an出現的頻率分別t1, t2, …, tn。可以用01串給這些單詞編碼,即將每個單詞與一個01串對應,使得任何一個單詞的編碼(對應的01串)不是另一個單詞編碼的字首,這種編碼稱為字首碼。 例如,文字E A E C D E B C C E C B D B E中, 5個單詞A、B、C、D、E出現的頻率分別為1, 3, 4, 2, 5,則一種可行的編碼方案是A:000, B:001, C:01, D:10, E:11,對應的編碼後的01串為1100011011011001010111010011000111,對應的長度L為3×1+3×3+2×4+2×2+2×5=34。 在這個例子中,如果使用哈夫曼(Huffman)編碼,對應的編碼方案是A:000, B:01, C:10, D:001, E:11,雖然最終文字編碼後的總長度只有33,但是這個編碼不滿足字典序編碼的性質,比如C的編碼的字典序不在D的編碼之前。 在這個例子中,有些人可能會想的另一個字典序編碼是A:000, B:001, C:010, D:011, E:1,編碼後的文字長度為35。 請找出一個字典序編碼,使得文字經過編碼後的長度L 輸入格式 輸入的第一行包含一個整數n,表示單詞的數量。 輸出格式 輸出一個整數,表示文字經過編碼後的長度L的最小值。 樣例輸入 5 樣例輸出 34 樣例說明 這個樣例就是問題描述中的例子。如果你得到了35,說明你算得有問題,請自行檢查自己的演算法而不要懷疑是樣例輸出寫錯了。 評測用例規模與約定 對於30%的評測用例,1 ≤ n ≤ 10,1 ≤ ti ≤ 20; |