POJ Fence Repair-哈夫曼树思想
来源:互联网 发布:js获取style 编辑:程序博客网 时间:2024/06/15 03:31
题意:给你n块长度已知的木板,已知FJ每次能连接两个木板成为一个新的木板,
新的木板长度为两块木板之和。问FJ把n块木板连接起来成最后的一块木板的长度最小
新的木板长度为两块木板之和。问FJ把n块木板连接起来成最后的一块木板的长度最小
题解:
(1)将初始数据看成是有n 棵树的森林(每棵树仅有一个结点);
(2)选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,
且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为 哈夫曼树
//----其实此题只是沿用哈弗曼树的形式计算值而已,并不需要真正建树
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>`#include <algorithm>#include <cctype>#include <queue>#include <vector>#define INF 0x7fffffff#define eps (1e-9)#define clearto(s,x) memset(s,x,sizeof(s))using namespace std;typedef long long llong;int n,m,tot=0;int main(){ //freopen("D:\data.txt","r",stdin); int TT,i,k,t; priority_queue<llong,vector<llong>,greater<llong> > q; while(~scanf("%d",&n)&&n) { long long tt,ans=0; for(i=0;i< n;i++) { scanf("%lld",&tt); q.push(tt); } while(q.size()>1){ tt =q.top(); q.pop(); tt+=q.top(); q.pop(); ans+=tt; q.push(tt); } //ans +=q.top(); printf("%lld",ans); } return 0;}
0 0
- POJ Fence Repair-哈夫曼树思想
- (哈夫曼树思想 )poj 3253 Fence Repair
- poj 3253 Fence Repair哈夫曼树
- Poj 3253 Fence Repair(哈夫曼树)
- 哈夫曼树 POJ 3253 Fence Repair
- poj 3253 Fence Repair(哈夫曼树)
- POJ 3253 Fence Repair 哈夫曼树
- poj 3253 Fence Repair (哈夫曼树)
- POJ 3253 Fence Repair 哈夫曼树
- poj 3253 Fence Repair (贪心+哈弗曼思想+优先队列)
- 贪心+优先队列(哈夫曼思想)POJ 3253 Fence Repair
- POJ 3253 Fence Repair 哈夫曼树/优先级队列
- POJ 3253 Fence Repair(优先队列&哈夫曼树)
- POJ 3253 Fence Repair (哈夫曼树,堆)
- POJ 3253 Fence Repair (哈夫曼树)Haffman-tree
- POJ 3253 Fence Repair 堆 哈夫曼树
- POJ 3253 Fence Repair 哈夫曼树 优先队列
- poj-3253 Fence Repair(哈夫曼树)
- 高效时间管理-介绍GTD
- SAE平台下搭建个人博客WORDPRESS
- 配置win2008防火墙 允许被Ping的设置方法
- Dinic非递归版(优化)
- 简单工厂、工厂方法、抽象工厂之小结与区别
- POJ Fence Repair-哈夫曼树思想
- sublime编译器运行java程序
- 冒泡排序和快速排序
- DNS 搭建
- 输入一个单向链表,输出该链表中倒数第K个结点
- Deferred Shading VS Deferred Lighting
- 【开源】EnterpriseFrameWork框架系列文章索引
- 双向链表
- 定义监听