Allison 最近迷上了文学。她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的《荷马史诗》。但是由《奥德赛》和《伊利亚特》组成的鸿篇巨制《荷马史诗》实在是太长了,Allison 想通过一种编码方式使得它变得短一些。
一部《荷马史诗》中有 种不同的单词,从 到 进行编号。其中第 种单词出现的总次数为 。Allison 想要用 进制串 来替换第 种单词,使得其满足如下要求: 对于任意的 ,都有: 不是 的前缀。
现在 Allison 想要知道,如何选择 ,才能使替换以后得到的新的《荷马史诗》长度最小。在确保总长度最小的情况下,Allison 还想知道最长的 的最短长度是多少?
Constraints
, $ 2 \leq k \leq 9$ , $ 0 \lt w_i \leq 10^{11}$
Solution
维哈夫曼编码,将 小的元素按规则合并即可。
哈夫曼编码具体右转 《霍夫曼编码(Huffman Coding)》 by xgf415
Code
1 |
|