题目链接:

  http://poj.org/problem?id=3253

题目大意:

  有一根木棍,需要截成n节,每节都有固定的长度,一根长度为x的木棒结成两段,需要花费为x,问截成需要的状态需要最小的花费?

解题思路:

  哈夫曼数,把每节需要的木棒长度看做树上的节点,把截木棍的过程倒过来,变成把n截木棍接起来,这两个过程的花费是一样的。根据哈夫曼的性质,可知先把最短的两个木棍连起来后,放到剩下的n-2根木棍中,再选取两个最短的连接起来,再放回去,直到全部的木根都连在一起就ok了。

代码:

 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <queue>
using namespace std; int main ()
{
priority_queue <int> Q;//优先队列,默认大的先出队,所以我们把进队的数取负
int n;
long long sum, num, m;
scanf ("%d", &n);
while (n --)
{
scanf ("%d", &m);
Q.push(-m);//进队
}
sum = ;
while (Q.size() > )//队列里面的元素个数要大于1
{
num = ; num += Q.top();//出队两个最短木棍
Q.pop(); num += Q.top();
Q.pop(); sum += num;//连接起来
Q.push(num);//进队
}
printf ("%lld\n", -sum);
return ;
}

最新文章

  1. Vertica 6.1不完全恢复启动到LGE方法
  2. android库站点
  3. C++ 一些笔记
  4. jsp中的&lt;jsp:setProperty&gt;中的param属性
  5. AssetBundle系列——游戏资源打包(一)
  6. 前端之JavaScript第一天学习(1)-JavaScript 简介
  7. erl0009 - erlang 读取时间瓶颈解决办法
  8. linux C(hello world) 二维数组的练习
  9. ecshop--加载初始化文件
  10. 【转】silverlight 跨域访问
  11. 【C# -- OpenCV】Emgu CV 第一个实例
  12. ostringstream使用
  13. 游戏开发常用JS
  14. 系统自动生成ID(比UUID.radom().tostring()要好看)
  15. windows10 docker镜像存储位置修改
  16. CTex+WinEdt10.2安装详细教程与破解
  17. http协议与他的三次握手和四次挥手
  18. linux常用命令一些解释
  19. DevExpressComponents-14.2.5 破解过程,正在编写,未完
  20. SSH学习三 SESSION

热门文章

  1. maven之发布项目到nexus【clean deploy命令】
  2. IntelliJ IDEA14.0.3+Maven+SpringMVC+Spring+Hibernate光速构建Java权限管理系统(三)
  3. 《从0到1》读书笔记第一章&amp;quot;未来的挑战&amp;quot;第1记:把握潮流风向
  4. jpa删除根据对象删除失败,报Removing a detached instance 错
  5. 广东IP段列表
  6. Centos 6.4 搭建LANMP一键安装版
  7. Cocos2d-X-3.0 之后的版本的环境搭建
  8. Matplotlib绘图基础
  9. 使用 Vagrant 构建开发环境
  10. 嵌入式开发之davinci--- 8148 小站信息