The problem Description Huffman tree is widely used in coding. Here, we only care about the construction of the Huffman tree.
Give a column number {
Pi}={
P0,
P1,...,
PN-1}, the process of constructing the Huffman tree with this number of columns is as follows:
1. Find {
Pi}, set the minimum number of two
PAAnd
PBWill
PAAnd
PBFrom
Pi}, and then add them to the {
PiIn The cost of this process is recorded as
PA+
PB。
2. Repeat step 1 until {
PiOnly one number is left.
The total cost of constructing the Huffman tree is obtained by summing up all the expenses during the above operation.
Task: For a given sequence of numbers, now ask you to find out the total cost of constructing the Huffman tree with this series.
For example, for the sequence {
Pi}={5, 3, 8, 2, the 9},huffman tree is constructed as follows:
1. Find the smallest 2 numbers in {5, 3, 8, 9, two}, respectively, 2 and 3, from {
PiDelete them and add 5 to the {5, 8, 9, 5} and the cost is 5.
2. Find the smallest 5 numbers in {5, 8, 9, two}, respectively 5 and 5, from {
PiDelete them and add 10 to the {8, 9, 10} and the cost is 10.
3. Find the smallest two numbers in {8, 9, 10}, respectively 8 and 9, from {
PiDelete them and add 17 to the {10, 17} and the cost is 17.
4. Find the minimum two numbers in {10, 17}, respectively 10 and 17, from {
PiDelete them and add 27 to the {27} at a cost of 27.
5. Now, only one number 27 is left in the sequence, and the construction process ends with a total cost of 5+10+17+27=59. Input format the first line of input contains a positive integer
N(
N<=100).
Next is
NA positive integer that represents
P0,
P1,...,
PN-1, no more than 1000 per number. The output format output uses these numbers to construct the total cost of the Huffman tree. Sample Input 5
5 3 8 2 9 Sample output 59
Import Java.util.scanner;import Java.util.priorityqueue;public class Main {static priorityqueue<integer> q; public static void Main (string[] args) {Scanner sc = new Scanner (system.in); q = new priorityqueue<integer> (); int n = Sc.nextint (); for (int i = 0; i < n; i++) {Q.offer (Sc.nextint ());} int ans = 0;int tmp1, tmp2;int ans1 = 0;while (!q.isempty () && q.size () >= 2) {ans = 0;TMP1 = Q.poll (); tmp2 = q . Poll (); ans = tmp1 + tmp2;q.offer (ans); ans1 + = ans;} System.out.println (ANS1);}}
Blue Bridge cup Java Basics Practice Huffuman tree