|
这题可用哈夫曼树做,可简短时间,但用普通做法也可。 这样的话关键就是怎么求最小的情况,一开始以为是从大到小排序,每次取最大的数加进去就好,这是错的。。 把一块木板据成N块不好想的话,那么把这个过程反过来:把N块木板拼成一块,每拼一次所需代价是两块木板长度之和。这样就是很明显的哈夫曼树了。 每次从现有的木板中选取最短的两块木板,拼在一起变成新的一块后放回去,重复这个过程直到只剩一块木板。 用最小堆实现以上操作就不会超时。 普通做法 代码: #include<stdio.h> |
本文介绍了一种使用哈夫曼树解决将N块木板拼接为一块的问题的方法,目的是找到使得拼接总成本最低的方案。通过始终选择当前最短的两块木板进行合并,并计算合并后的成本,最终得到最低的总成本。
|
这题可用哈夫曼树做,可简短时间,但用普通做法也可。 这样的话关键就是怎么求最小的情况,一开始以为是从大到小排序,每次取最大的数加进去就好,这是错的。。 把一块木板据成N块不好想的话,那么把这个过程反过来:把N块木板拼成一块,每拼一次所需代价是两块木板长度之和。这样就是很明显的哈夫曼树了。 每次从现有的木板中选取最短的两块木板,拼在一起变成新的一块后放回去,重复这个过程直到只剩一块木板。 用最小堆实现以上操作就不会超时。 普通做法 代码: #include<stdio.h> |
143

被折叠的 条评论
为什么被折叠?