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

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

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

 //#include<iostream>
#include<cstring>
#include<cstdio>
//#include<math.h>
//#include<set>
#include<queue>
//#include<bitset>
//#include<vector>
#include<algorithm>
#include<stdlib.h>
using namespace std; #define LL long long
int qread()
{
char c; int s=,f=; while ((c=getchar())<'' || c>'') (c=='-') && (f=-);
do s=s*+c-''; while ((c=getchar())>='' && c<=''); return s*f;
} //Pay attention to '-' , LL and double of qread!!!! int n,K;
#define maxn 200011
struct qnode
{
LL v; int dep;
bool operator > (const qnode &b) const {return v>b.v || (v==b.v && dep>b.dep);}
};
priority_queue<qnode,vector<qnode>,greater<qnode> > q; int main()
{
n=qread(); K=qread(); LL v;
for (int i=;i<=n;i++) {scanf("%lld",&v); q.push((qnode){v,});}
if ((n-)%(K-)) for (int i=,to=(K-)-(n-)%(K-);i<=to;i++) q.push((qnode){,}),n++;
LL ans=;
for (int i=,to=(n-)/(K-);i<=to;i++)
{
LL nv=; int nd=;
for (int j=;j<=K;j++) nv+=q.top().v,nd=max(nd,q.top().dep),q.pop();
ans+=nv; q.push((qnode){nv,nd+});
}
printf("%lld\n%d\n",ans,q.top().dep);
return ;
}

最新文章

  1. Execl数据导入sql server方法
  2. SpringMVC 处理数据模型
  3. visio画UML用例图没有include关系的解决方法
  4. c#实现数据的左补右补功能
  5. intellij idea +maven4+springmvc4搭建
  6. threading event
  7. VS2013 当前不会命中断点还未为文档加载任何符号
  8. JAXB - XML Schema Types, Defining Subtypes
  9. MAC img 安装 mysql 修改密码
  10. redis 主从配置实例、注意事项、及备份方式
  11. Python----Windows环境下安装Flask
  12. main方法和args参数
  13. 【Java】多线程初探
  14. centos7 64运行32位程序
  15. Linux重要命令总结
  16. 用servlet验证密码2
  17. 链路聚合trunk实现
  18. MyEclipse 2016 破解详细过程
  19. windows下如何通过git bash获取gitlab ssh公钥
  20. 抛弃WebService,在.NET4中用 jQuery 调用 WCF

热门文章

  1. python 使用uuid 出现重复
  2. 第六篇:python中numpy.zeros(np.zeros)的使用方法
  3. Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本
  4. CSS3小知识
  5. 遗传算法 | Java版GA_TSP (2)
  6. nova boot添加volume_type参数支持
  7. 工具类commons-io的Tailer用来监控文件
  8. 洛谷P1424小鱼的航程改进版
  9. C#入门篇5-8:流程控制语句 break语句
  10. Python框架之Django的相册组件