荷马史诗

建一个k叉哈夫曼树,用堆维护一下

 // luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define MAXN 1000010
#define max(i,j) ((i)>(j)?(i):(j))
#define int long long
int n,ans,k;
struct NODE{
int w,h;
} a[MAXN];
struct cmp{
bool operator()(NODE x,NODE y){ 
if(x.w!=y.w) return x.w>y.w;  // 先按代价大小排序
else return x.h>y.h;      // 再按子树深度排序
}
};
inline int read(){
int x=; char c=getchar();
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') { x=(x<<)+(x<<)+c-''; c=getchar(); }
return x;
}
priority_queue< NODE, vector < NODE > , cmp > q0,q;
#undef int
int main()
#define int long long
{
n=read(); k=read();
int x; NODE p0;
p0.w=; p0.h=;
for(int i=;i<=n;i++){
x=read(); NODE p;
p.w=x; p.h=; q0.push(p);
}
q=q0; ans=;
int top=;
if((n-)%(k-)!=) top=k--(n-)%(k-);
for(int i=;i<=top;i++) q.push(p0);
while(q.size()>){
NODE s=p0;
for(int i=;i<=k;i++){
NODE b=q.top(); q.pop();
ans+=b.w; s.w+=b.w; s.h=max(s.h,b.h);
}
s.h++;
q.push(s);
}
NODE t=q.top();
printf("%lld\n%lld",ans,t.h-);
return ;
}

最新文章

  1. VB.NET操作Excel
  2. [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】
  3. linux打包与压缩
  4. Activity的Launch Mode
  5. PHP读取CSV数据写入数据库
  6. 2016年10月30日--JavaScript语法
  7. Effective Java之避免创建不必要的对象
  8. hdu 4003 Find Metal Mineral 树形DP
  9. loadrunner 脚本和replaylog中的中文乱码问题(转载)
  10. [wikioi]过河卒
  11. iOS开源 框架
  12. 【LeetCode练习题】Gas Station
  13. malloc实现原理
  14. 1.1 office安装
  15. js input输入事件兼容性问题
  16. 核心类生成-Mybatis Generator的使用
  17. mysql执行sql语句过程
  18. 修改openstack用户配额
  19. [2017BUAA软工助教]个人项目准备工作
  20. 不一样的go语言-athens私仓安装

热门文章

  1. jenkins~管道Pipeline里使用公用类库
  2. Rabbitmq~对Vhost的配置
  3. centOS7关闭防火墙的命令
  4. node+express搭建过程以及安装ejs模板引擎解决方案
  5. centos 6.5搭建LNMP环境
  6. nyoj 364——田忌赛马——————【贪心】
  7. 类的方法练习——定义MySQL类
  8. js CheckBox 全选、反选
  9. TextView来实现跑马灯的效果
  10. cocos2d-x 学习笔记之 CCMenuItemToggle用法