2216 求WPL

 
描述

Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。

输入

第一行为要编码的符号数量n
第二行~第n+1行为每个符号出现的频率

输出

对应哈夫曼树的带权路径长度WPL

样例输入
5
7
5
2
4
9
样例输出
WPL=60

#include <iostream>
#include <queue>
using namespace std;



int main()
{
	int k;
	cin >> k;
	int *a = new int[ k ];
	int temp, m;
	priority_queue<int,vector<int>,greater<int> > q;

	for ( int i = 0; i < k; i++ )
	{
		cin >> temp;
		q.push( temp );
	}
	int sum = 0;
	for ( int i = 0; i < k-1; i++ )
	{
		m = q.top();
		q.pop();
		temp = q.top();
		q.pop();
		q.push( m + temp );
		sum += m + temp;
	}

	cout << "WPL=" << sum << endl;
	
	return 0;
}

		


 

你可能感兴趣的:(2216 求WPL)