是个多叉huffman树,思想类比合并果子。

具体见 CrazyDave 的博客

CODE

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
struct node {
LL w, h;
node(){}
node(LL w, LL h):w(w), h(h){}
inline bool operator <(const node &o)const {
return w == o.w ? h > o.h : w > o.w;
}
};
priority_queue<node>q;
int n, k;
int main () {
scanf("%d%d", &n, &k);
LL x, ans = 0;
for(int i = 1; i <= n; ++i) {
scanf("%lld", &x);
q.push(node(x, 1));
}
int cnt = ((k-1) - (n-1)%(k-1)) % (k-1);
while(cnt--) q.push(node(0, 1));
cnt = q.size();
while(cnt > 1) {
LL w = 0, h = 0;
for(int i = 1; i <= k; ++i)
w += q.top().w, h = max(h, q.top().h), q.pop();
ans += w;
q.push(node(w, h+1));
cnt -= k-1;
}
printf("%lld\n%lld\n", ans, q.top().h-1);
}

最新文章

  1. Coping with the TCP TIME-WAIT state on busy Linux servers
  2. MySQL备份命令mysqldump参数说明与示例
  3. C# 文件读取(二)
  4. 做 fzu oj 1106 题目学到的
  5. CI_Autocomplete_2.0.php轻松实现Bebeans与Codeigniter的智能提示
  6. [PeterDLax著泛函分析习题参考解答]第2章 线性映射
  7. 一个PHP常用表单验证类(基于正则)
  8. c语言构建动态数组
  9. 读取Oracle表结构数据
  10. 第三十五节,json数据类型转换字符串模块
  11. VHDL学习记录
  12. Linux特殊字符用法、后台命令管理
  13. Masonry中的mas_makeConstraints方法
  14. 从Linux 与 Unix 异同,看开源世界的发展!
  15. firewall-cmd 常用命令
  16. python操作三大主流数据库(1)python操作mysql①windows环境中安装python操作mysql数据库的MySQLdb模块mysql-client
  17. matlab与python读取tiff文件
  18. JS开发工具WebStorm使用快捷键
  19. table滑块
  20. 国内高速Maven仓库

热门文章

  1. if(&quot;\v&quot;==&quot;v&quot;)来判断IE浏览器
  2. [转帖]CPU时间片
  3. JAVA_split 字符串按照 . 分割
  4. gdb 常用命令总结(精优)
  5. C++Primer 5th Chap8 The IO Library
  6. 嵌入式Linux学习笔记之第一阶段---基础篇
  7. Eclipse一些技巧
  8. Aso.Net Core 的配置系统Configuration--转
  9. 解决 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 以及MyBatis批量加载xml映射文件的方式
  10. (一)SpringMvc简介以及第一个springmvc工程