n个节点k叉。(如果(n-1)%(k-1)!=0)先合并(n-1)%(k-1)+1个节点再k个K个合并

#include<bits/stdc++.h>
using namespace std;
long long a[1005];
queue<long long> q1,q2;
long long hafuman(int n,int k)
{while(!q2.empty()) q2.pop();int temp;long long sum=0,t;if((n-1)%(k-1)==0)temp=k;else temp=(n-1)%(k-1)+1;while(temp--){sum+=q1.front();q1.pop();}t=sum;q2.push(sum);temp=k;while(!q1.empty()){sum=0;for(int i=0;i<k;i++){if(!q2.empty()&&!q1.empty()){if(q1.front()>q2.front()){sum+=q2.front();q2.pop();}else{sum+=q1.front();q1.pop();}}else if(!q1.empty()){sum+=q1.front();q1.pop();}else {sum+=q2.front();q2.pop();}}t+=sum;q2.push(sum);}if(q2.size()==1)return t;else{while(1){sum=0;for(int i=0;i<k;i++){sum+=q2.front();q2.pop();}t+=sum;q2.push(sum);if(q2.size()==1)return t;}}}
int main()
{int n,k;while(~scanf("%d %d",&n,&k)){for(int i=0;i<n;i++)scanf("%lld",&a[i]);sort(a,a+n);for(int i=0;i<n;i++)q1.push(a[i]);long long ans=hafuman(n,k);printf("%lld\n",ans);}}

xdoj 1144 K叉哈弗曼树相关推荐

  1. c语言文件压缩与解压缩实验报告,哈弗曼树的文件压缩和解压实验报告(C语言).doc...

    Lab05 树结构的应用 学号: 姓名: 实验时间:2011.5.24 1.问题描述 哈弗曼树的编码与译码 - 功能:实现对任何类型文件的压缩与解码 - 输入:源文件,压缩文件 - 输出:解码正确性判 ...

  2. Python 数据结构与算法 —— 哈弗曼树

    1. 从扩充二叉树到哈弗曼树 扩充二叉树:对二叉树 TT,加入足够多的新叶节点(而不是任意),使 TT 的原有结点都变成度数为 2 的分支节点,得到的二叉树称为 TT 的扩充二叉树. 对于扩充二叉树而 ...

  3. 【DSA】树-哈弗曼树详解(3)

    什么是哈弗曼树 百度百科的定义 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长 ...

  4. 【哈弗曼树】 WOJ2343 围栏维修

    [描述] 农民 John 希望修复围绕农场的一小段围栏.他测量了一下,发现需要N (1 <= N <= 20,000) 根木头,每根都有某一个整数长度 Li (1 <= Li < ...

  5. 哈弗曼树的带权路径长度

    最近刷题刷到了这一题,此题是北邮往年复试题,看了一些网上的讲解,大多数是方法比较复杂,有些巧妙的方法又往往却缺少解释,为了方便大家理解,给小伙伴们梳理梳理 题目描述: 哈夫曼树,第一行输入一个数n,表 ...

  6. java实践源码--哈弗曼树

    package huffmanTree; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; ...

  7. 简单哈弗曼树(Java)

    哈夫曼树的实现 1.编码思想 哈夫曼编码是一种变长的编码方案,字符的编码根据使用频率的的不同而长短不一, 使用频率高的字符其编码较短,使用频率低的字符编码较长,从而使所有的编码总长度为最短. 统计原始 ...

  8. 【BZOJ4198】荷马史诗,贪心之k叉哈夫曼树

    传送门 思路: 很早以前听说过这个题 据说是一个很强的贪心(?) 然后一上来就往贪心上去想--(其实一开始知道算法不是很好,因为你不会走弯路了) 发现这玩意好像是个合并果子的模型-- 也不知道是怎么转 ...

  9. 贪婪算法在解决哈夫曼树及编码问题中的应用

    哈夫曼编码,是一种可变字长编码(VLC)的高效算法.该算法是Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码. 相比定长编码来 ...

最新文章

  1. 删除空值_空白单元格行,如何快速批量删除?简单方法,效率飞升
  2. python三大神器===》装饰器
  3. Andriod 学习笔记 layout布局
  4. Python3.7 Scrapy安装(Windows)
  5. 译:重置/还原Windows IIs设置为默认设置
  6. Eclipse中修改SVN地址
  7. Initramfs 原理和实践
  8. 微软 Windows 10 将支持 8 英寸以下 ARM 平板设备
  9. ETL工具——Taskctl Web应用篇
  10. EAS BOS:序时簿中获取选中行中某单元格的值方法
  11. linux ubantu最新版本,过去十年最佳的Ubuntu版本
  12. oracle创建数据库的先决条件,Oracle数据库安装先决条件检查失败解决方案
  13. 小酌重构系列[12]——去除上帝类
  14. iPhone检测是否存在耳麦
  15. 智能血糖仪方案/案列/APP/小程序/项目
  16. JESD204B IP核的配置与使用
  17. linux 山东大学 试卷_绝密·启用前丨《2019年山东大学研究生高考试题》
  18. GIS电子地图定制开发技术
  19. Linux服务器:Linux中VMware虚拟机硬盘空间扩大方法
  20. stm32ad测量范围_用STM32的AD测电压,范围是0~3.3V,但是输入电压可能高于3.3,怎么保护STM32?...

热门文章

  1. 2022-2028年中国铅锌精矿粉行业市场研究及前瞻分析报告
  2. 2022-2028年中国电竞椅行业市场行情监测及未来发展前景研究报告
  3. linux启动,重启,停止 jar,.sh脚本
  4. tf.shape()
  5. PyTorch官方中文文档:torch.optim 优化器参数
  6. LeetCode中等题之无重复字符的最长字串
  7. PyTorch 神经网络
  8. CVPR2020行人重识别算法论文解读
  9. JavaWeb--过滤器
  10. 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数