【BZOJ4198】[Noi2015]荷马史诗【k叉Huffman树】【贪心】

来源:互联网 发布:centos的vmdk文件下载 编辑:程序博客网 时间:2024/05/01 02:39

【题目链接】

学习一发NOIP初赛知识。

/* Pigonometry */#include <cstdio>#include <algorithm>#include <queue>using namespace std;typedef long long LL;int n, k, top;struct _data {LL w, h;bool operator < (const _data &x) const {return w != x.w ? w > x.w : h > x.h;}};priority_queue<_data> q;int main() {scanf("%d%d", &n, &k);for(int i = 1; i <= n; i++) {LL w; scanf("%lld", &w);q.push((_data){w, 0});}if((n - 1) % (k - 1) != 0) top = k - 1 - (n - 1) % (k - 1);for(int i = 1; i <= top; i++)q.push((_data){0, 0});top += n;LL ans = 0;for(; top != 1; top -= k - 1) {LL w = 0, h = 0;for(int i = 1; i <= k; i++) {_data x = q.top(); q.pop();w += x.w; h = max(h, x.h);}ans += w;q.push((_data){w, h + 1});}printf("%lld\n%lld\n", ans, q.top().h);return 0;}


0 0