$n \leq 100000$个数字,放进$k$叉树里,一个点只能放一个数,使所有数字乘以各自深度这个值之和最小的同时,最大深度的数字最小。

哈夫曼。这是我刚学OI那段时间看到的,感觉就是个很无聊的贪心,而且密码学我也不学深对哈夫曼的应用也了解不多,没想到出现在noi。

原来的哈夫曼只需要每次拿k个最小的数出来,建一个他们共同的父亲并在一起,当作一个权值为他们权值之和的新点,用堆可以实现;由于$(n-1) \mod (k-1)$不一定为0,需要补几个0点进去。相对于原来的哈夫曼,这里多了个深度限制,那只需要把堆里元素再记一下最大深度就可以了。

 1 //#include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 //#include<math.h>
 5 //#include<set>
 6 #include<queue>
 7 //#include<bitset>
 8 //#include<vector>
 9 #include<algorithm>
10 #include<stdlib.h>
11 using namespace std;
12
13 #define LL long long
14 int qread()
15 {
16     char c; int s=0,f=1; while ((c=getchar())<'0' || c>'9') (c=='-') && (f=-1);
17     do s=s*10+c-'0'; while ((c=getchar())>='0' && c<='9'); return s*f;
18 }
19
20 //Pay attention to '-' , LL and double of qread!!!!
21
22 int n,K;
23 #define maxn 200011
24 struct qnode
25 {
26     LL v; int dep;
27     bool operator > (const qnode &b) const {return v>b.v || (v==b.v && dep>b.dep);}
28 };
29 priority_queue<qnode,vector<qnode>,greater<qnode> > q;
30
31 int main()
32 {
33     n=qread(); K=qread(); LL v;
34     for (int i=1;i<=n;i++) {scanf("%lld",&v); q.push((qnode){v,0});}
35     if ((n-1)%(K-1)) for (int i=1,to=(K-1)-(n-1)%(K-1);i<=to;i++) q.push((qnode){0,0}),n++;
36     LL ans=0;
37     for (int i=1,to=(n-1)/(K-1);i<=to;i++)
38     {
39         LL nv=0; int nd=0;
40         for (int j=1;j<=K;j++) nv+=q.top().v,nd=max(nd,q.top().dep),q.pop();
41         ans+=nv; q.push((qnode){nv,nd+1});
42     }
43     printf("%lld\n%d\n",ans,q.top().dep);
44     return 0;
45 }

View Code

转载于:https://www.cnblogs.com/Blue233333/p/9288151.html

LOJ#2132. 「NOI2015」荷马史诗相关推荐

  1. 【NOI2015】荷马史诗

    显然一个Huffman树,然后改成 \(K\) 叉的就好.但是我不会Huffman树,于是学学拓宽知识面. 首先这个 \(K\) 叉树就是一个类似字典树的东西,但是不对应目标串的点都是非叶结点(不然不 ...

  2. [NOI2015]荷马史诗【哈夫曼编码】

    [NOI2015]荷马史诗 推荐一篇题解 (感觉自己讲不清楚所以不如直接粘题解) 观察之后发现这就是哈夫曼编码,于是按照编码方式构造即可. #include <bits/stdc++.h> ...

  3. 洛谷P2168 荷马史诗 [NOI2015]

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

  4. NOI2015 Day2 T1 荷马史诗(洛谷P2168)

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

  5. 【Huffman树】【贪心】【NOI 2015】【bzoj 4198】荷马史诗

    4198: [Noi2015]荷马史诗 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 127 Solved: 80 Description 追逐影子的 ...

  6. [NOI 2015]荷马史诗

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

  7. Loj #3111. 「SDOI2019」染色

    Loj #3111. 「SDOI2019」染色 题目描述 给定 \(2 \times n\) 的格点图.其中一些结点有着已知的颜色,其余的结点还没有被染色.一个合法的染色方案不允许相邻结点有相同的染色 ...

  8. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

  9. LOJ#2230. 「BJOI2014」大融合

    LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...

最新文章

  1. mysql构建url给scrapy_Python Scrapy从mysq填充起始url
  2. RabbitMQ发布确认原理
  3. RabbitMQ消息手动应答生产者
  4. MOV及MP4文件格式中几个重要的Table
  5. [2.9训练]【CF909C】Python Indentation,【CF909D】Colorful Points,【CF909E】Coprocessor
  6. shiro学习(18):使用注解实现权限认证和后台管理三
  7. eas报错日记_(FAQ)EAS服务启动失败[金蝶EAS]
  8. Eclipse 编译StanfordNLP
  9. java名字自动生成_Java名字生成器
  10. 金山云服务器e1型,金山云-文档中心-重装系统
  11. HDMI调试基本原理
  12. 玉米社:短视频运营主要做哪些工作?
  13. android截屏大小不一致,Android中的高分辨率屏幕截图
  14. 应聘PHP有面试题吗,php应聘面试题
  15. oracle减法函数mius_Oracle 基础知识习题175道
  16. 国产化信创CPU、操作系统、数据库、中间件笔记
  17. 职教计算机录取分数,今年高职院校录取分数线是多少?
  18. 苹果称只保证直营店iPad补差价 近1周投诉急增
  19. 【单片机】心形流水灯の制作指南(保姆级)
  20. CMS-页面静态化技术

热门文章

  1. 从头开始敲代码之《从BaseApplication/Activity开始(二)》
  2. android jar 加密
  3. telnet/ftp/netstat/ping命令詳細介紹
  4. IE浏览器下DOM节点被替换后获取边界offsetParent / getBoundingClientRect 的BUG解决(版本 EXT 2.0/ 2.0.1)...
  5. 使用MFC里的类的方法
  6. 设计模式(二十四)解释器模式
  7. linux7.2 静态IP设置,Centos 7 学习之静态IP设置
  8. MySql---数据库笔记(功能齐全)
  9. numpy之高维数组的转置:transpose方法——通过几何体来迅速理解
  10. 19号以后包括数组在内的所有内容(数组、函数、方法、dom操作)