poj 3253 Fence Repair (水哈夫曼树)
2024-09-08 08:10:52
题目链接:
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 ;
}
最新文章
- Vertica 6.1不完全恢复启动到LGE方法
- android库站点
- C++ 一些笔记
- jsp中的<;jsp:setProperty>;中的param属性
- AssetBundle系列——游戏资源打包(一)
- 前端之JavaScript第一天学习(1)-JavaScript 简介
- erl0009 - erlang 读取时间瓶颈解决办法
- linux C(hello world) 二维数组的练习
- ecshop--加载初始化文件
- 【转】silverlight 跨域访问
- 【C# -- OpenCV】Emgu CV 第一个实例
- ostringstream使用
- 游戏开发常用JS
- 系统自动生成ID(比UUID.radom().tostring()要好看)
- windows10 docker镜像存储位置修改
- CTex+WinEdt10.2安装详细教程与破解
- http协议与他的三次握手和四次挥手
- linux常用命令一些解释
- DevExpressComponents-14.2.5 破解过程,正在编写,未完
- SSH学习三 SESSION
热门文章
- maven之发布项目到nexus【clean deploy命令】
- IntelliJ IDEA14.0.3+Maven+SpringMVC+Spring+Hibernate光速构建Java权限管理系统(三)
- 《从0到1》读书笔记第一章&;quot;未来的挑战&;quot;第1记:把握潮流风向
- jpa删除根据对象删除失败,报Removing a detached instance 错
- 广东IP段列表
- Centos 6.4 搭建LANMP一键安装版
- Cocos2d-X-3.0 之后的版本的环境搭建
- Matplotlib绘图基础
- 使用 Vagrant 构建开发环境
- 嵌入式开发之davinci--- 8148 小站信息