传送门
思路:
很早以前听说过这个题
据说是一个很强的贪心(?)
然后一上来就往贪心上去想……(其实一开始知道算法不是很好,因为你不会走弯路了)
发现这玩意好像是个合并果子的模型……
也不知道是怎么转化过去的,好像是什么哈弗曼编码,也没有学过(pia)但是手造了几个点,发现都是类似取最小值然后贪心合并的方法
像我这种不会拟阵啥的弱鸡对付贪心就是要大胆猜想小心尝试
那我们尝试直接合并呗?
顺便记录个siz啥的存合并次数,在权值相同时取siz较小的不就行了吗
这题也敢出到noi?
然后快速敲出来,交到cogs上
然后得了77分

再思考:是不是取到最后可能会不足k-1个?那么只取到剩余k-1个,然后一口气合并行不行?
然后得了81分

这就有点蛋疼了
记得某些神犇的noi游记里写这个题的时候说到了haffman树,赶紧去学习了一个
回来之后……
原来这是个裸的k叉haffman树啊……
原来合并果子是经典哈弗曼树(二叉哈夫曼树)啊……
原来这是基础知识啊……
我以前只在初赛笔试里见过它啊……

何为弱鸡
虽然这道题没看题解,但我觉得和看题解好像没什么区别……啊.
代码:

#include<cstdio>
#include<iostream>
#include<queue>
#define LL long long
using namespace std;
int n,k,tot,mx;
LL ans;
struct node{LL val;int siz;bool operator <(const node other)const{if (val==other.val) return siz>other.siz;return val>other.val;}
}a[100005];
priority_queue <node> q;
main()
{scanf("%d%d",&n,&k);for (int i=1;i<=n;++i)scanf("%lld",&a[i].val),q.push(a[i]);while ((n-1)%(k-1)) ++n,q.push(a[n]);tot=n,mx=1;for (;tot>1;){LL t1=0;int t2=0;for (int i=1;i<=k;++i,q.pop())t1+=q.top().val,t2=max(t2,q.top().siz+1);q.push((node){t1,t2});tot-=k-1;ans+=t1;mx=max(mx,t2);}printf("%lld\n%d\n",ans,mx);
}

【BZOJ4198】荷马史诗,贪心之k叉哈夫曼树相关推荐

  1. 荷马史诗【k叉哈夫曼树】

    题目描述 追逐影子的人,自己就是影子. --荷马 达达最近迷上了文学. 她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>. 但是由<奥德赛>和 ...

  2. K叉哈夫曼树构造方法 O(N)

    带权路径:是树中所有的叶结点的权值乘上其到根结点的路径长度. 哈夫曼树就是带权路径最小的树. 有n个数(即n个叶子节点),构造k叉(k>=2)哈夫曼树的方法: 构造哈夫曼树,其实就是不停的&qu ...

  3. 【HDU - 5884】Sort(k叉哈夫曼树,优化tricks,两个队列代替优先队列)

    题干: Recently, Bob has just learnt a naive sorting algorithm: merge sort. Now, Bob receives a task fr ...

  4. 两个队列+k叉哈夫曼树 HDU 5884

    1 // 两个队列+k叉哈夫曼树 HDU 5884 2 // camp题解: 3 // 题意:nn个有序序列的归并排序.每次可以选择不超过kk个序列进行合并,合并代价为这些序列的长度和.总的合并代价不 ...

  5. 哈夫曼树+K叉哈夫曼树

    目录 基本概念 构造方法 证明 代码 k叉哈夫曼树 例题 基本概念 问题:给定n个权值,作为n个叶结点,构造一棵二叉树,而这棵树的特点是,有n个叶节点,叶节点的值为给定的权值.而内部节点的值为子树的权 ...

  6. bzoj 4198 [ Noi 2015 ] 荷马史诗 —— 哈夫曼编码(k叉哈夫曼树)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4198 第一次写哈夫曼树!看了很多博客. 哈夫曼树 & 哈夫曼编码:https://w ...

  7. Sort HDU5884(二分+多叉哈夫曼树)

    HDU5884 Sort 题意:有n个序列要进行归并,每次归并的代价是两个序列的长度的和,要求最终的代价不能超过规定的T,求在此前提下一次能同时进行归并的序列的个数k. 思路:还是太单纯,看完题目一直 ...

  8. [Huffman树] aw149. 荷马史诗(哈夫曼模型+贪心)

    文章目录 1. 题目来源 2. 题目解析 1. 题目来源 链接:149. 荷马史诗 2. 题目解析 k叉哈夫曼树问题. n 个叶子节点合并成 1 个点,总共合并减少 n-1 个点,每次合并都会减少 ( ...

  9. 周末狂欢赛4(1-02E. JM的西伯利亚特快专递,寿司晚宴,荷马史诗)

    文章目录 T1:1-02E. JM的西伯利亚特快专递 题目 题解 code T2:寿司晚宴 题目 题解 code T3:荷马史诗 题目 题解 code T1:1-02E. JM的西伯利亚特快专递 题目 ...

最新文章

  1. 关于Silverlight中多项目共享DLL文件的讨论
  2. php中ide快捷键,PhpStorm、WebStorm及其他系列IDE快捷键
  3. MVC5+EF6 入门完整教程十
  4. 25个吸引眼球的广告设计
  5. Django学习~1
  6. C++编程练习:抽象类——编写一个程序,计算三角形、正方形的面积,抽象出一个基类base。
  7. c语言编程题笔试 博客,【笔试题】C语言:模拟实现strncmp
  8. php中的active,用ActivePHP打造版本管理系统
  9. Python二级笔记(16)
  10. html中把句子往右边弄一点咋办,CSS上的左,中,右对齐方法,可以在一行上混合...
  11. Redis和数据库的结合
  12. Android事件传递机制(转)
  13. 知乎问答 | 如何在同一坐标系下绘制多幅图形
  14. MFC采用定时器绘制简单动画
  15. 收银机多少钱一台推荐科脉系统_收银系统多少钱一套?常用收银系统价格大盘点...
  16. 解决:WPS文字行末是英文单词时自动换行问题
  17. Java面试被问特长,面试官问“你有什么特长”,这三种回答堪称完美,拿走不谢...
  18. 数据库安全性存取控制机制
  19. Java高级工程师必备知识!kafka消费topic命令
  20. linux rsh用法,Linux中rsh远程shell命令的使用技巧解析

热门文章

  1. 【读一本书】《昇腾AI处理器架构与编程》--神经网络基础知识(2)
  2. win10系统怎么写java_win10系统制作java文本的操作方法
  3. 红橙Darren视频笔记 万能Dialog builder设计模式
  4. Zookeeper启动闪退可能原因及解决方案
  5. IDEA打jar包时出现manifest.mf already exists in vfs解决办法
  6. 谈谈你对oracle,对Oracle的优化
  7. centos7 mysql 冲突_CentOS7安装MySQL冲突和问题解决小结
  8. 孙长凯sunck_傅里叶变换红外光谱分析NMDA受体单克隆抗体抗-中国科技论文在线.PDF...
  9. int 为什么是2147483647_现在的C语言编辑器里的int范围为什么是-2147483648~2147483647...
  10. servlet-cookie实现向客户端写cookie信息