LOJ#2132. 「NOI2015」荷马史诗
2024-08-25 01:48:15
$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 ;
}
最新文章
- Execl数据导入sql server方法
- SpringMVC 处理数据模型
- visio画UML用例图没有include关系的解决方法
- c#实现数据的左补右补功能
- intellij idea +maven4+springmvc4搭建
- threading event
- VS2013 当前不会命中断点还未为文档加载任何符号
- JAXB - XML Schema Types, Defining Subtypes
- MAC img 安装 mysql 修改密码
- redis 主从配置实例、注意事项、及备份方式
- Python----Windows环境下安装Flask
- main方法和args参数
- 【Java】多线程初探
- centos7 64运行32位程序
- Linux重要命令总结
- 用servlet验证密码2
- 链路聚合trunk实现
- MyEclipse 2016 破解详细过程
- windows下如何通过git bash获取gitlab ssh公钥
- 抛弃WebService,在.NET4中用 jQuery 调用 WCF
热门文章
- python 使用uuid 出现重复
- 第六篇:python中numpy.zeros(np.zeros)的使用方法
- Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本
- CSS3小知识
- 遗传算法 | Java版GA_TSP (2)
- nova boot添加volume_type参数支持
- 工具类commons-io的Tailer用来监控文件
- 洛谷P1424小鱼的航程改进版
- C#入门篇5-8:流程控制语句 break语句
- Python框架之Django的相册组件