xdoj--1144 (合并模板)--有趣的优先队列(优先队列默认权值最大的数在前面)
我觉得这道题出的很好 区别于“哈夫曼树”
因为事之多合并k个 理论说尽可能多合并。
然后我们看一个简单的例子
4 3
1 2 3 4 ——》6 4——》10 (6+10)=16;
1 2 3 4 ——》3 3 4---》 10 (3+10)=13;
除了保证合并树最小的数最底层 也要保证每个数的高度最低
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
priority_queue <LL,vector <LL>, greater <LL> > q;//注意大整数
int n,k;
int main ()
{
while (~scanf ("%d %d",&n,&k)) {
for (int i=;i<=n;i++) {
LL x; scanf ("%lld",&x);
q.push(x);
}
int t=(n-)/(k-);
int p=n-(k-)*t;
LL tmp=;
for (int i=;i<=p&&p!=;i++) {
tmp+=q.top(); q.pop();// 先合并不足一次合并为k的
}
LL ans=tmp;
if (p!=) q.push(tmp);
for (int i=;i<=t;i++) {
tmp=;
for (int j=;j<=k;j++) {
tmp+=q.top(); q.pop();
}
ans+=tmp;
q.push(tmp);
}
q.pop();
printf ("%lld\n",ans);
}
return ;
}
xdoj--1144 (合并模板)--有趣的优先队列(优先队列默认权值最大的数在前面)的更多相关文章
- 【bzoj1977】[BeiJing2010组队]次小生成树 Tree  最小生成树+权值线段树合并
		题目描述 求一张图的严格次小生成树的边权和,保证存在. 输入 第一行包含两个整数N 和M,表示无向图的点数与边数. 接下来 M行,每行 3个数x y z 表示,点 x 和点y之间有一条边,边的权值为z ... 
- Luogu 1090 合并果子(贪心,优先队列,STL运用)
		Luogu 1090 合并果子(贪心,优先队列,STL运用) Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每 ... 
- 【XDU1144】合并模板
		问题 Fate 有 n 个 ACM/ICPC 比赛的模板,每个都是一个独立的 PDF 文件.为了便于打印,万神希望将这些模板合并成一个 PDF 文件.万神有一个工具,可以将至多 k 个 PDF 文件合 ... 
- C# 创建邮件合并模板并合并文本、图片
		对于Word中的邮件合并功能,用户可以将邮件合并后的结果文档保存并打印,也可以通过邮件的形式发送,在很多场合需要使用到此功能.那对于编程人员,我们也可以在C#语言环境中通过代码的形式来实现.根据需要先 ... 
- Java 在Word中创建邮件合并模板并合并文本和图片
		Word里面的邮件合并功能是一种可以快速批量操作同类型数据的方式,常见的如数据填充.打印等.其中必不可少的步骤包括用于填充的模板文档.填充的数据源以及实现邮件合并的功能.下面,通过Java程序展示如何 ... 
- 权值线段树&线段树合并
		权值线段树 所谓权值线段树,就是一种维护值而非下标的线段树,我个人倾向于称呼它为值域线段树. 举个栗子:对于一个给定的数组,普通线段树可以维护某个子数组中数的和,而权值线段树可以维护某个区间内数组元素 ... 
- B20J_2733_[HNOI2012]永无乡_权值线段树合并
		B20J_2733_[HNOI2012]永无乡_权值线段树合并 Description:n座岛,编号从1到n,每座岛都有自己的独一无二的重要度,按照重要度可以将这n座岛排名,名次用1到 n来表示.某些 ... 
- Thymeleaf模板如何获取springMVC返回的model值
		Thymeleaf模板如何获取springMVC返回的model值 后台的实现: @RequestMapping("/hello") public String hello(Mod ... 
- [bzoj 2733]启发式合并权值线段树
		题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2733 平衡树待学习.从一个博客学到了合并权值线段树的姿势:http://blog.csdn ... 
随机推荐
- oracle 11g创建数据库教程
			cd /oracle/app/oracle/product//dbhome_1/bin ./dbca 自定义用户表空间大小. 安装过程半个小时是需要的. 2.配置oracle系统用户环境变量 使用vi ... 
- python3线程启动与停止
			转自: https://blog.csdn.net/weixin_38125866/article/details/76795462 https://www.cnblogs.com/lcchuguo/ ... 
- 【Java算法】获得一个随机字符串
			package suanfa; import java.util.Random; public class RandomStr { public static String getRandomStr( ... 
- laravel中的注册页面
			<?php namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; class RegisterCo ... 
- windows 文件/文件夹操作
			move命令 命令作用:移动某个文件到指定的文件夹下 将D:\file\abc.zip 移动到 E:\test\文件夹下 move d:\file\abc.zip e:\test\ 移动之后再原来的文 ... 
- Win10系列:VC++调用自定义组件1
			通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ... 
- C++模板类之pair
			Pair类型概述 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair<int, string> a; 表示a中有两个类型,第一个元素是int型的 ... 
- ng-table
			需要的文件: angular.js ng-table.js ng-table.css bootrasp.css 注入依赖: var app = angular.module('app', [ 'ngT ... 
- angular4-表单
			导入表单模块 import { FormsModule } from '@angular/forms'; // ... @NgModule({ imports: [BrowserModule, For ... 
- C++输出数组名
			1.如果C++输出的数组是char类型的,那么输出的就是数组中的元素. 2.如果使用的是其他类型的数组作为输出的话,那么就是一个16进制的地址. 3.还是那句话,对数组的操作,很多时候都是指针的操作, ... 
