NOI 2015 荷马史诗
来源:互联网 发布:使用java制作电脑程序 编辑:程序博客网 时间:2024/05/01 14:19
题意:
扩展的Huffman编码(由以前的二进制变为了k进制)
求编码后文章最短长度和Huffman树的最小高度(或者说最长串最短长度,当然是在文章最短前提下)
你不知道Huffman编码?
你知道Huffman编码但不知道是怎么回事?
看CLRS(算法导论)贪心那一章吧,无比详细,伪代码,图解,证明样样俱全;
你没有CLRS?
白书(算法竞赛入门经典)上也有(但不如CLRS的详细);
连白书都没有?
百(baí)度(chī)百(bì)科(kēng);
题解:
既然已经知道是Huffman编码了那么思路就比较明确了:
仿照Huffman二叉形式写k叉;
二叉形式一次弹出两个(最小值),那k叉一次弹出k个(最小值);
那么就用堆(不是k叉堆);
你用splay?好像也可以;
堆中保存Huffman树中串出现频率和,以及Huffman树的深度;
比较时先比较频率和,再比较深度(不可不比,要保证Huffman树高最小);
每次合并时,ans都要加上合并后长度(要不然求的是串频率和),而深度在取最大后再插入时要加一;
当堆中只有一个元素时退出,这时,ans和该元素深度即为答案;
初始化堆时,各元素深度为0,若n!≡1mod(k-1),那么补齐n,增加的新元素频率为0(显然),深度为0;
重要提示:
想省空间的一定要注意什么时候是long long int,什么时候是 int,尤其注意中间变量!
其实不必担心k太大,用时大概是O(knlogn/(k-1));
注: http://blog.csdn.net/Quack_quack/article/details/46958413,你也可以直接看他写的题解;
- NOI 2015 荷马史诗
- NOI 2015 荷马史诗
- NOI 2015 荷马史诗 题解&代码
- NOI 2015 荷马史诗 (哈夫曼树)
- NOI 2015 荷马史诗 k叉哈夫曼树 堆优化
- NOI 2015 荷马史诗 k叉哈夫曼树 优先队列
- NOI 2015 荷马史诗 k叉哈夫曼树 堆优化
- 【Huffman树】【贪心】【NOI 2015】【bzoj 4198】荷马史诗
- 荷马史诗
- BZOJ4198荷马史诗
- 荷马史诗
- [BZOJ4198][Noi2015]荷马史诗
- bzoj4198【noi2015】荷马史诗
- bzoj4198 noi2015 荷马史诗
- 【NOI2015】bzoj4198 荷马史诗
- 洛谷 P2168 荷马史诗
- 4198: [Noi2015]荷马史诗
- 【bzoj4198】[NOI2015]荷马史诗
- 为QML动态生成Tab
- 某CEO将公司最低工资提到7万美金,自己降薪90%
- Ubuntu 15.04 折腾手记(3)
- jquery定时器
- Android中为什么不提供双击事件的接口
- NOI 2015 荷马史诗
- shader编程学习(2)遮挡显示
- Datatables从入门到精通(案例一)
- 计划策略-25-具有配置的订货型生产
- 操作系统文件管理
- 物料变式的订货型生产(3.0C:可库存的类型)(26)
- 计划策略-30-按销售与库存订单以批量生产
- Xcode6 添加pch文件
- 【iOS开发之Objective-C】协议和代理