日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

问题 1462: [蓝桥杯][基础练习VIP]Huffuman树

發(fā)布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 问题 1462: [蓝桥杯][基础练习VIP]Huffuman树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述 Huffman樹在編碼中有著廣泛的應用。在這里,我們只關心Huffman樹的構造過程。?

給出一列數(shù){pi}={p0,? p1,? …,? pn-1},用這列數(shù)構造Huffman樹的過程如下:?

1.? 找到{pi}中最小的兩個數(shù),設為pa和pb,將pa和pb從{pi}中刪除掉,然后將它們的和加入到{pi}中。這個過程的費用記為pa? +? pb。?

2.? 重復步驟1,直到{pi}中只剩下一個數(shù)。?

在上面的操作過程中,把所有的費用相加,就得到了構造Huffman樹的總費用。?

本題任務:對于給定的一個數(shù)列,現(xiàn)在請你求出用該數(shù)列構造Huffman樹的總費用。?



例如,對于數(shù)列{pi}={5,? 3,? 8,? 2,? 9},Huffman樹的構造過程如下:?

1.? 找到{5,? 3,? 8,? 2,? 9}中最小的兩個數(shù),分別是2和3,從{pi}中刪除它們并將和5加入,得到{5,? 8,? 9,? 5},費用為5。?

2.? 找到{5,? 8,? 9,? 5}中最小的兩個數(shù),分別是5和5,從{pi}中刪除它們并將和10加入,得到{8,? 9,? 10},費用為10。?

3.? 找到{8,? 9,? 10}中最小的兩個數(shù),分別是8和9,從{pi}中刪除它們并將和17加入,得到{10,? 17},費用為17。?

4.? 找到{10,? 17}中最小的兩個數(shù),分別是10和17,從{pi}中刪除它們并將和27加入,得到{27},費用為27。?

5.? 現(xiàn)在,數(shù)列中只剩下一個數(shù)27,構造過程結束,總費用為5+10+17+27=59。? 輸入 輸入的第一行包含一個正整數(shù)n(n< =100)。?

接下來是n個正整數(shù),表示p0,? p1,? …,? pn-1,每個數(shù)不超過1000。? 輸出 輸出用這些數(shù)構造Huffman樹的總費用。? 樣例輸入 5 5 3 8 2 9 樣例輸出 59

優(yōu)先隊列 1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,x; 4 int main() { 5 priority_queue<int, vector <int>, greater<int> > pq; 6 while(cin>>n){ 7 for(int i=0;i<n;i++){ 8 cin>>x; 9 pq.push(x); 10 } 11 int sum=0; 12 while(pq.size()>1){ 13 int x1=pq.top(); 14 pq.pop(); 15 int x2=pq.top(); 16 pq.pop(); 17 int y=x1+x2; 18 sum+=y; 19 pq.push(y); 20 } 21 cout<<sum<<endl; 22 } 23 return 0; 24 }

?

轉載于:https://www.cnblogs.com/shixinzei/p/10562679.html

總結

以上是生活随笔為你收集整理的问题 1462: [蓝桥杯][基础练习VIP]Huffuman树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。