Huffman树又叫做最优二叉树,表示带权路径长度最短的树,对于每一个叶子节点来说,代价为点权*路径深度,解决问题的思路为将最小的两个节点成树,然后插回原队列,重复这一过程。
Huffman编码就是利用了Huffman树的过程,将频率当做点权,而树的结构本身就保证了没有公共前缀。
Problem:
有一个足够长的木板,给定n个需求得木块儿,切n-1刀可以切成这n个木块儿,每一刀的代价是当前所切木板的长度,求最小代价。
Solution:
整个过程就是一颗二叉树,而代价就是每一个叶子节点的权*深度,所以是典型的Huffman问题。
note:
一定要注意数据的大小,要用long long。
#include<cstdio>
#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<string>
#include<cstring&g