1. 程式人生 > >藍橋杯-基礎練習 Huffman樹

藍橋杯-基礎練習 Huffman樹

  Huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心Huffman樹的構造過程。
  給出一列數{pi}={p0p1, …, pn-1},用這列數構造Huffman樹的過程如下:
  1. 找到{pi}中最小的兩個數,設為papb,將papb從{pi}中刪除掉,然後將它們的和加入到{pi}中。這個過程的費用記為pa + pb
  2. 重複步驟1,直到{pi}中只剩下一個數。
  在上面的操作過程中,把所有的費用相加,就得到了構造Huffman樹的總費用。
  本題任務:對於給定的一個數列,現在請你求出用該數列構造Huffman樹的總費用。

  例如,對於數列{pi}={5, 3, 8, 2, 9},Huffman樹的構造過程如下:
  1. 找到{5, 3, 8, 2, 9}中最小的兩個數,分別是2和3,從{pi
}中刪除它們並將和5加入,得到{5, 8, 9, 5},費用為5。
  2. 找到{5, 8, 9, 5}中最小的兩個數,分別是5和5,從{pi}中刪除它們並將和10加入,得到{8, 9, 10},費用為10。
  3. 找到{8, 9, 10}中最小的兩個數,分別是8和9,從{pi}中刪除它們並將和17加入,得到{10, 17},費用為17。
  4. 找到{10, 17}中最小的兩個數,分別是10和17,從{pi}中刪除它們並將和27加入,得到{27},費用為27。
  5. 現在,數列中只剩下一個數27,構造過程結束,總費用為5+10+17+27=59。

相關推薦

藍橋-基礎練習 Huffman

  Huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心Huffman樹的構造過程。  給出一列數{pi}={p0, p1, …, pn-1},用這列數構造Huffman樹的過程如下:  1. 找到{pi}中最小的兩個數,設為pa和pb,將pa和pb從{pi}中刪除掉,然後將它們的和加入到{pi}中。這

貪心演算法--藍橋基礎練習Huffman

貪心演算法 所謂“貪心演算法”是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說。不從整體上加以考慮,它所做出的僅僅是在某種意義上的區域性最優解(是否是全域性最優,需要證明)。 例如 藍橋杯 基礎練習Huffman樹 問題描述   H

藍橋 基礎練習 Huffuman (C語言)

問題描述   Huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心Huffman樹的構造過程。   給出一列數{pi}={p0, p1, …, pn-1},用這列數構造Huffman樹的過程如下:   1. 找到{pi}中最小的兩個數,設為pa和pb,將pa和pb從

藍橋vip練習 Huffman

問題描述   Huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心Huffman樹的構造過程。   給出一列數{pi}={p0, p1, …, pn-1},用這列數構造Huffman樹的過程如下:   1. 找到{pi}中最小的兩個數,設為pa和pb,將pa和pb從{

藍橋 基礎練習 Huffuman

問題描述   Huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心Huffman樹的構造過程。   給出一列數{pi}={p0, p1, …, pn-1},用這列數構造Huffman樹的過程如下:   1. 找到{pi}中最小的兩個數,設為pa和pb,將pa和pb從

藍橋基礎練習---矩陣乘法

cst ans 時間限制 str 絕對值 忘記 個數 clu 表示 基礎練習 矩陣乘法 時間限制:1.0s 內存限制:512.0MB 錦囊1 錦囊2 錦囊3 問題描述   給定一個N

藍橋 基礎練習 BASIC-12 十六進制轉八進制

info div for 限制 class 輸入 字符 字母 res 基礎練習 十六進制轉八進制 時間限制:1.0s 內存限制:512.0MB 問題描述  給定n個十六進制正整數,輸出它們對應的八進制數。輸入格式  輸入的第一行為一個正整數n (1<=n

藍橋-基礎練習 :java 數列排序問題

repl 給定 can .cn turn exti color 問題 http 問題描述   給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200 輸入格式   第一行為一個整數n。  第二行包含n個整數,為待排序的數,每個整數的絕對值小

藍橋- 基礎練習: 字母圖形

alt gpo pan 圖片 -- ext .com color ack import java.util.Scanner; public class W { /* A B C D E F G B A B C D E F C B A B C D E D C B A

藍橋 基礎練習 十六進制轉八進制

spa tro rgs number 解決 ann ret else if ger import java.util.*;public class Main { public static void main(String[] args) { Scann

藍橋 基礎練習 十六進制轉十進制

溢出 oid import scan post 文件 ava 轉化 藍橋杯 import java.util.*;public class Main { public static void main(String[] args) { Scanner s

藍橋 基礎練習 十進制轉十六進制

out pos hex can ati static sca ner 十進制 import java.util.*;public class Main { public static void main(String[] args) { Scanner

藍橋 基礎練習 特殊回文數

pan void system ali i++ 數據 util new style /*基礎練習 特殊回文數問題描述  123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。  輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n 。輸入格

藍橋 基礎練習 字母圖形

int() [] 基礎練習 tin next can abc out ann /** * 問題描述 利用字母可以組成一些美麗的圖形,下面給出了一個例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 這是一個5行7列的圖形,請找出這個圖形的

藍橋基礎練習 完美的代價

iostream div amp sin 移動 第一次 第一個 對稱 個數 問題描述   回文串,是一種特殊的字符串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你一個串,它不一定是回文的,請你計算最少的交換次數使得該串變成一個完美的回文串。  交換

藍橋基礎練習 高精度加法

pre 基礎 格式 比較 計算 所有 一個數 bit i++ 問題描述   輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。 算法描述   由於a和b都比較大,所以不能直接使用語言中的標準數據類型來存儲。對於這種問題,一般使用數組來處理。  定義一個數組A,

藍橋 基礎練習 十進位制轉十六進位制 (練習棧方法)

問題描述   十六進位制數是在程式設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表示十進位制數的0至15。十六進位制的計數方法是滿16進1,所以十進位制數16在十六進位制中是10,而十進位制的17在十六進位制中是1

藍橋 基礎練習 十六進位制轉八進位制

   基礎練習 十六進位制轉八進位制   時間限制:1.0s   記憶體限制:512.0MB        問題描述   給定n個十六進位制正整數,輸出它們對應的八進位制數。輸入格式

藍橋 基礎練習 矩陣乘法(java)

話不多說,直接上程式碼。 import java.util.Scanner; public class Main4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n

藍橋基礎練習------數列排序

問題描述   給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200 輸入格式   第一行為一個整數n。   第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。 輸出格式   輸出一行,按從小到大的順序輸出排序後的數列。 樣