有n堆果子,每堆果子的质量已知,现在需要把这些果子合并成一堆,但是每次只能把两堆果子合并到一起,同时会消耗与两堆果子质量之和等值的体力。显然,在进行n-1次合并之后,就只剩下一堆了。
合并果子问题可以转化为:已知n个数,寻找一棵树,使得树的所有叶子结点的权值恰好为这n个数,并且使得这棵树的带权路径长度最小。
(哈夫曼树问题)
输入:
3
2 9 1
应该先合并1和2,再将结果3存入队列,后合并3和9,存入15,此时队列中只有一个数,循环结束,输出结果
理想输出结果:
3
2 9 1
15
代码如下:
#