1. 程式人生 > >NOI 2015 荷馬史詩

NOI 2015 荷馬史詩

題意:
擴充套件的Huffman編碼(由以前的二進位制變為了k進位制)
求編碼後文章最短長度和Huffman樹的最小高度(或者說最長串最短長度,當然是在文章最短前提下)
你不知道Huffman編碼?
你知道Huffman編碼但不知道是怎麼回事?
看CLRS(演算法導論)貪心那一章吧,無比詳細,虛擬碼,圖解,證明樣樣俱全;
你沒有CLRS?
白書(演算法競賽入門經典)上也有(但不如CLRS的詳細);
連白書都沒有?
百(baí)度(chī)百(bì)科(kēng);

題解:
既然已經知道是Huffman編碼了那麼思路就比較明確了:
仿照Huffman二叉形式寫k叉;
二叉形式一次彈出兩個(最小值),那k叉一次彈出k個(最小值);
那麼就用堆(不是k叉堆);
你用splay?好像也可以;
堆中儲存Huffman樹中串出現頻率和,以及Huffman樹的深度;
比較時先比較頻率和,再比較深度(不可不比,要保證Huffman樹高最小);
每次合併時,ans都要加上合併後長度(要不然求的是串頻率和),而深度在取最大後再插入時要加一;
當堆中只有一個元素時退出,這時,ans和該元素深度即為答案;
初始化堆時,各元素深度為0,若n!≡1mod(k-1),那麼補齊n,增加的新元素頻率為0(顯然),深度為0;
重要提示:
想省空間的一定要注意什麼時候是long long int,什麼時候是 int,尤其注意中間變數!
其實不必擔心k太大,用時大概是O(knlogn/(k-1));
注:

http://blog.csdn.net/Quack_quack/article/details/46958413,你也可以直接看他寫的題解;

相關推薦

bzoj 4198 [ Noi 2015 ] 史詩 —— 哈夫曼編碼(k叉哈夫曼樹)

log mes com can rest opera 編碼 type pro 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4198 第一次寫哈夫曼樹!看了很多博客。 哈夫曼樹 & 哈夫曼編碼:https:/

NOI 2015 史詩

題意: 擴充套件的Huffman編碼(由以前的二進位制變為了k進位制) 求編碼後文章最短長度和Huffman樹的最小高度(或者說最長串最短長度,當然是在文章最短前提下) 你不知道Huffman編碼

NOI 2015 史詩 題解&程式碼

對於一些不同的單詞,每個單詞會給出一個出現頻率 對於每個單詞,給它一個唯一的字串型的編號【不是其它字串型編號的字首】 其實是個貪心【噗】,按照哈弗曼樹的形式將出現頻率與編碼長度反序排列…就好了 #

NOI 2015史詩

print tor 優先 queue urn amp IT () 就是 【題目鏈接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4198 【算法】 不難發現,題目中所說的

UOJ#130 【NOI2015】史詩 K叉哈夫曼樹

i++ getchar ext getch pre user sum spec getc 【NOI2015】荷馬史詩 鏈接:http://uoj.ac/problem/130 因為不能有前綴關系,所以單詞均為葉子節點,就是K叉哈夫曼樹。第一問直接求解,第二問即第二關鍵

【洛谷P2168】史詩

輸入 bool spa priority 新的 輸出格式 inline 格式 += 題目描述 追逐影子的人,自己就是影子 ——荷馬 Allison 最近迷上了文學。她喜歡在一個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的《荷馬史詩》。但是由《奧德賽》和《伊利亞

【BZOJ 4198】[Noi2015]史詩 哈夫曼編碼

clu tor space zoj col 具體實現 %d sca bool 合並果子加強版....... 哈夫曼樹是一種特別的貪心算法,它的作用是使若幹個點合並成一棵樹,每次合並新建一個節點連接兩個合並根並形成一個新的根,使葉子節點的權值乘上其到根的路徑長的和最短(等價

BZOJ 4198[Noi2015]史詩

表示 ans per 方案 滿足 amp opera priority int 4198: [Noi2015]荷馬史詩 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1408 Solved: 746[Submit][St

NOI2015 史詩 [哈夫曼樹]

per inpu h+ 正是 存在 space pre 節點 noi2015 Description 一部《荷馬史詩》中有n種不同的單詞,從1到n進行編號。其中第i種單 詞出現的總次數為wi。Allison 想要用k進制串si來替換第i種單詞,使得其滿足如下要求: 對於任意

4198: [Noi2015]史詩 (哈夫曼樹基礎)

如何選擇 是否 scrip print for scanf 表示 stat tor 一、題目概述 4198: [Noi2015]荷馬史詩 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1545 Solved: 818[Su

[NOI2015]史詩

AC #define int() pop ace efi print tro air 題目:洛谷P2168、codevs5501。 題目大意:有n種單詞,每種單詞有一個出現次數。現在要用k進制字符串代表這些單詞,使得任意一個字符串不是另一個的前綴。問:最短的總長度是多少?

BZOJ4198: [Noi2015]史詩(哈夫曼樹)

成了 inpu const 包含 printf 來替 iso stat .com Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1824 Solved: 983[Submit][Status][Discuss] Desc

LOJ#2132. 「NOI2015」史詩

amp bitset 感覺 nbsp 個數 none sin splay cstring $n \leq 100000$個數字,放進$k$叉樹裏,一個點只能放一個數,使所有數字乘以各自深度這個值之和最小的同時,最大深度的數字最小。 哈夫曼。這是我剛學OI那段時間看到的,感覺

哈夫曼樹 史詩-洛谷

這道題目做了五個多小時,主要還是不瞭解哈夫曼樹的一些細節問題,自己做個總結吧。 題目連結:https://www.luogu.org/problemnew/show/P2168 總結: 一:這道題目的一些收穫 1:求最終編碼文字的長度,不一定必須讓字元組成的編碼的長度資訊必須儲存在葉

【BZOJ4198】【UOJ130】【NOI2015】史詩

【題目連結】BZOJUOJ【思路要點】如果將一個合法的分配方案放到字典樹上,那麼每一個關鍵節點均為葉子結點。考慮如何使答案最小化,資料範圍較大,考慮貪心。我們注意到一系列具有相同父親的葉子結點可以被看作

4198: [Noi2015]史詩

題目連結 題目大意:一篇文章有n個單詞,其中第i個單詞的出現次數為w[i]。你要用k進位制串s[i]替換第i種單詞。要求:對於任意i!=j,都有s[i]不是s[j]的字首。 要使替換後的文章總長度最小。 求這個最小總長度。 在這個前提下,要使s[i]的最

【BZOJ4198】史詩,貪心之k叉哈夫曼樹

傳送門 思路: 很早以前聽說過這個題 據說是一個很強的貪心(?) 然後一上來就往貪心上去想……(其實一開始知道演算法不是很好,因為你不會走彎路了) 發現這玩意好像是個合併果子的模型…… 也不

史詩(NOI2015)提高組

1. Problem Description 追逐影子的人,自己就是影子 ——荷馬 Allison 最近迷上了文學。她喜歡在一個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的《荷馬史詩》。但是由《奧德賽》和《伊利亞特》 組成的鴻篇鉅製《荷馬史詩》

【huffman】bzoj4198:【UOJ#130】 [Noi2015]史詩

Description Time Limit: 10 Sec Memory Limit: 512 MB 追逐影子的人,自己就是影子。 ——荷馬 Allison 最近迷上了文學。她喜歡在一個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛

bzoj4198 [Noi2015] [史詩] Huffman 編碼

1.維護k叉樹,注意補零 2.用堆來維護最小的頻率和長度,每次向上合併,在合併時統計答案 3.如果 n % (k-1)=1那麼就不用補零(因為每次合併就相當於增加k-1個節點,所有如果能合併成一個節