1. 切金条
一块金条切成两半,是需要花费和长度数值一样的铜板的。
比如长度为20的金条, 不管切成长度多大的两半,都要花费20个铜板。
一群人想整分整块金条, 怎么分最省铜板?
例如,给定数组{10,20,30}, 代表一共三个人, 整块金条长度为10+20+30=60。金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50, 花费60。再把长度50的金条分成20和30,花费50。一共花费110铜板。但是如果先把长度60的金条分成30和30,花费60再把长度30金条分成10和20,花费30一共花费90铜板。
输入一个数组, 返回分割的最小代价。
1.1 分析
这是一个标准的哈夫曼问题:两个叶节点合并的时候,代价就是叶节点之和。
给定10,20,30,构成一个数,使得所有非叶节点之和最小。
解题思路:
给定一组数:{1,2,6,4,3,7,1,8},然后将这组数构成一个小根堆。每次从小根堆中拿出两个数。
第一次拿的肯定是两个1。这两个1生成一个节点,代价为2。然后把这个2扔回到小根堆中。
接着拿出两个数:两个2,这两个2合并的代价为4,然后将4扔回到小根堆中。。。。
最终得到的结果:
贪心:在所有的数中总是拿两个最小的。
此题中,切割的顺序