题目传送门
首先是题目大意:
- 对一系列数进行有成本的加法运算
- 求解最小成本
举例说明成本计算:
对于第一格中,给定数列“1,2,3”,它的最小成本是6。
即每次计算的成本是两数之和,总成本是单次计算的成本之和。
从样例中不难看出,每次从数列中选取最小的两个数相加计入成本即可。但是!!! 应该是 每次 都要选取最小的两个数,而不是采用一开始排好的队列。
所以,一道很经典的哈夫曼树题目 这里采用优先队列来实现Huffman算法。
接下来是对优先队列的用法记录,方便日后复习,可以直接跳过:
STL中的priority_queue:
模板:priority_queue<Type, Container, Functional>
Type — 数据类型
Container — 保存容器 //一般为vector或deque,但不能是list 缺省的话默认是vector
Functional — 排序方式 默认降序 //可以用greate<type> 或 less<type>
注:priority_queue很棒的地方就在于它会自动排序,所以用来实现此题就很方便
代码实现:
#include<iostream>
#include<queue>
#include