哈夫曼树,一个很耳熟的数据结构课上的内容。是用来处理编码的,准确的说是能够去压缩编码,本身是一种无损的压缩凡是,就是对于给定的字符做一个统计,然后根据统计构建一个长短不一的映射表,再根据这个映射表来恢复出原来的内容。

这题是有一个长度为固定值得篱笆L,现在要N块木板来维护好这个篱笆,只要用锯子锯N-1次,题目就是给定N个长度,问如何安排使得最终的花费最短。花费是这样算的,要去锯那一段,那么花费就是这一段的长度。所以就有当某一段没有被分离出来时,那么它将连续作用于切割这一段的效果。因此我们希望起到这个连续作用的值越小越好,因此就可以用哈夫曼树来优化了。使用优先队列来写是非常方便的。

代码如下:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define MAXN 50000
using namespace std;int N;long long sum;struct Node {int x;bool operator < (Node temp) const{return x > temp.x;}
}info;priority_queue<Node>q;void deal() {int k; Node pos;while (q.size()) {k = 0;if (q.size() >= 2) {pos = q.top();k += pos.x;q.pop();pos = q.top();k += pos.x;q.pop();sum += k;pos.x = k;q.push(pos);}else q.pop();}
}int main()
{while (scanf("%d", &N) == 1) {while (!q.empty()) {q.pop();}sum = 0;for (int i = 1; i <= N; ++i) {scanf("%d", &info.x);q.push(info);}deal();cout << sum << endl;}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2012/09/06/2673817.html

POJ-Fence Repair 哈夫曼树相关推荐

  1. hoj2677 Instruction Set // poj3253Fence Repair 哈夫曼树

    /* 哈弗曼编码,比如权值为 a:1 b:1 c:2 d:3 e:5 f:6 的树 1.开始时由最小的两个数 a:1 b:1组成一棵树 2.接着由新的最小的两个数 2 c:2 d:3 e:5 f:6 ...

  2. POJ3253 Fence Repair【哈夫曼树+优先队列】

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 48026   Accepted: 15784 De ...

  3. Vijos P1097 合并果子【哈夫曼树+优先队列】

    描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...

  4. 超好理解的哈夫曼树(最优二叉树)与例题

    对于比较官方的说法就是给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值 ...

  5. 哈夫曼树+密码题+TTL

    这周又做了几道题,挺有意思的,记录下. 一 .奇怪的TTL 至于什么是TTL,我给大家解释下:IP报文在路由间穿梭的时候每经过一个路由,TTL就会减1,当TTL为0的时候,该报文就会被丢弃.TTL所占 ...

  6. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  7. 优先级队列实现哈夫曼树的编码和译码

    //优先级队列实现的哈夫曼树的编码和译码 #include<iostream> #include<queue> #include<string> using nam ...

  8. HDU1053 Entropy 哈夫曼树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1053 认真读题,别怕题长,此题考查的就是哈夫曼树并求出最小编码值,注意每一次要将数组清0,否则会出错! ...

  9. 数据结构与算法(6-5)二叉树的应用--哈夫曼树与哈夫曼编码

    目录 哈夫曼编码(最优二叉树) 一.优势:缩短电文长度 二.思想: 三.过程: 四.图解实现过程: 五.总代码 哈夫曼编码(最优二叉树) 一.优势:缩短电文长度 二.思想: 获取每个字符出现的频率,用 ...

最新文章

  1. Android SQLiteDatabase的使用
  2. python全栈工程师能接到私活么_Python全栈工程师(包、模块 的导入)
  3. 前端js获取SpringMvc后台model中传值
  4. invoke方法_JVM是如何执行方法调用的?
  5. 基于jquery.fixedheadertable 表格插件左侧固定 对齐
  6. 如何加入微服务 Apache ServiceComb 社区
  7. 考研复习(2)链表操作
  8. Git 常见问题总结
  9. wchar_t转为char*
  10. php 正则 修饰符,php 正则修饰符
  11. CUDA+cuDNN下载安装(配备GPU环境)
  12. 从零手写VIO(三)——LM算法
  13. c语言数学追赶法编程,计算方法——C语言实现——追赶法求解非线性方程
  14. 金鳞岂是池中物IT评论博客正式成立
  15. 金彩教育:店铺中的人才布局
  16. python 打开xls文件写数据
  17. 张博涵清华大学_2009年北大,清华提前录取保送生人数最多的 33所中学
  18. python相册排版_Python3一键排版证件照(1寸照、2寸照) | 原创
  19. 如何用代码让钉钉报警-开发公司内部的钉钉报警系统
  20. 【历史上的今天】10 月 28 日:比尔·盖茨诞生;HTML 5 发布标准;讯飞语音输入法发布

热门文章

  1. linux shell中怎样批量修改文件名为 文件夹_文件名
  2. 20190509杂题选讲
  3. Confluence 6 修改日志文件的大小数量和级别
  4. fatal error LINK1123:failure during conversion to COFF:file invalid or corrupt
  5. iOS边练边学--UITableViewCell的常见属性设置
  6. (转) mp4编码全介绍 (一)
  7. RHEL5.8系统裁减(内含做小Linux前的准备工作)
  8. 练习(黄冈中学布局)
  9. 记录使用 Golang math/rand 随机数遇到的坑
  10. Golang 环境变量须知